Netcat是一个主流的命令行网络工具。它主要是建立一****个传输层的连接,可以交互式的读取、写入应用层数据。支持TCP、UDP两个传输层协议,也支持Unix domain socket。作为客户端连接到服务器,作为服务端为某些程序提供一个网络接口。可以用来做一些的故障排查、文件传输、四层代理。
Unix domain sockets 使用系统文件的地址来作为自己的身份。它可以被系统进程引用。所以两个进程可以同时打开一个Unix domain sockets来进行通信。不过这种通信方式是发生在系统内核里而不会在网络里传播。
nc 192.168.31.111 22 -v
nc 127.0.0.1 2345 -v
一些明文协议可以交互式的与服务端交互,如HTTP、Redis、memcache、smtp等协议
printf "GET / HTTP/1.1\r\n\r\n" | nc 127.0.0.1 8000
nc 192.168.31.111 8080 < multiple_http_request
nc 192.168.31.111 6379
nc smtp.sina.com 25 -v
nc 192.168.31.111 11211 -v
nc 192.168.31.111 8101 -v
对于一些非明文协议,比如SSH、MySQL等,虽然与服务端交互不是很友好,但是可以做一些协议类型的检测。
SSH协议检测
nc 192.168.31.111 22
SSH-2.0-OpenSSH_6.6.1p1 Ubuntu-2ubuntu2.3
nc 192.168.31.111 3306
Q5.7.21-20-log}El/n}f a-ag[qgosOmysql_native_password
netcat可以监听一个地址,作为服务端,接受客户端的请求。
nc -l 2345
nc -l 2345 < test.php
nc 192.168.100.100 > test.php
需要通过命名管道(named pipe
)实现两个进程的输入输出重定向。
命名管道是计算机进程间的一种先进先出通信机制。是类Unix系统传统管道的扩展。传统管道属于匿名管道,其生存期不超过创建管道的进程的生存期。但命名管道的生存期可以与操作系统运行期一样长。
与传统的无名的shell管道不同,命名管道利用了文件系统。使用mkfifo或mknod创建命名管道。两个进程可以通过管道的名字打开、读写管道。
jsonnrpc_server.py
是一个简单的json rpc实现,它接收请求从标准输入,将jsonrpc响应输出到标准输出。
nc -l 2345 < /tmp/jsonrpc | ./jsonrpc_server.py > /tmp/jsonrpc
nc 127.0.0.1 2345
mkfifo /tmp/netcat_tunnel
nc -l 8081 < /tmp/netcat_tunnel | nc www.baidu.com 80 > /tmp/netcat_tunnel
curl 127.0.0.1:8081 -H ‘Host: www.baidu.com‘
nc -l 8081 < /tmp/netcat_tunnel | nc www.baidu.com 443 > /tmp/netcat_tunnel
curl https://127.0.0.1:8081 -H ‘Host: www.baidu.com‘ -I -k
nc -l 8081 < /tmp/netcat_tunnel | nc 192.168.31.111 22 > /tmp/netcat_tunnel
ssh root@127.0.0.1 -p8081 -i ~/.ssh/id_rsa
扫描192.168.31.111上的22到80端口号
nc -z 192.168.31.111 22-80
nc -l 2345 < /tmp/netcat_tunnel | sh -i > /tmp/netcat_tunnel
openssl套装提供了两个子命令,s_server
和s_client
分别是ssl服务器和ssl客户端。
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365
openssl s_server -key key.pem -cert cert.pem -port 2345 < test.php
openssl s_client -host 127.0.0.1 -port 2345 -sess_out test.php
原文:https://blog.51cto.com/jlnetc/2752621