赞
踩
[TOC]
nc工具
Linux常用命令行太多了,重开一个
说明
nc是netcat的简写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具
实现任意TCP/UDP端口的侦听,nc可以作为server以TCP或UDP方式侦听指定端口
端口的扫描,nc可以作为client发起TCP或UDP连接
机器之间传输文件
机器之间网络测速
所以ssh等可以把nc当代理用
常用参数
-l
用于指定nc将处于侦听模式。指定该参数,则意味着nc被当作server,侦听并接受连接,而非向其它地址发起连接。
-p
设置本地主机使用的通信端口,暂未用到。
-s
指定发送数据的源IP地址,适用于多网卡机
-u
指定nc使用UDP协议,默认为TCP
-v
输出交互或出错信息,新手调试时尤为有用
-w
超时秒数,后面跟数字
-z
表示zero,表示扫描时不发送任何数据.据说与-l选项一起使用会有错误
-n
直接使用IP地址,而不通过域名服务器。
-o
指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-i
设置时间间隔,以便传送信息及扫描通信端口。
-4
使用IPV4
-6
使用IPV6
-X
指定协议数字,4:socks4. 5:socks5. connect:https. 如果不写默认为socks5.
-x
指定请求的地址
NC常用案例
服务端启动一个Server服务(默认tcp),监听999端口
nc -l 999
使用nc来做连接
nc -vz -w 5 127.0.0.1 999
或
nc -vzw 5 127.0.0.1 999
使用telnet来做连接
telnet 127.0.0.1 999
使用nc来扫描端口-监测端口是否存在
nc -z -v 127.0.0.1 999 998 997
服务端起一个server同时监听两个端口
nc -l 999 &
nc -l 998 &
客户端同时扫描两个端口
nc -vzw 5 127.0.0.1 998-999
服务端起一个udp的server监听999端口
nc -ul 999
使用http协议请求百度
nc www.baidu.com 80
GET / HTTP/1.1
Host:www.baidu.com
如果在这里再敲一下回车,NGINX返回响应信息.如果还有其他报文,可以这里继续往下写.
注释:
回车完成整个请求,这个牵扯到http协议和NGINX,http协议本无此规定.
但是在使用nc连接NGINX服务时,在连接后胡乱写信息,然后敲一下回车NGINX就会返回信息(感觉就像完全发送了报文).
但是如果使用nc连接NGINX后,在连接后从头码http协议头,敲回车只会进入下一行.只有在报文最后的空行中敲回车(也就是说在发送报文时,要在报文中最后添加一个空行)NGINX此时才会响应信息.为什么会这样呢? 根据HTTP协议规定,HTTP header和报文主体之间通过空行来分隔;所以NGINX肯定不会随意断开正规的http报文.
百度响应信息:
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 14615
Content-Type: text/html
Date: Mon, 23 Sep 2019 08:18:09 GMT
Etag: "5d7f08a7-3917"
Last-Modified: Mon, 16 Sep 2019 03:59:35 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: no-cache
Server: BWS/1.1
Set-Cookie: BAIDUID=D819D9F7C8824C4D33D33634265EA137:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: BIDUPSID=D819D9F7C8824C4D33D33634265EA137; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Set-Cookie: PSTM=1569226689; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1
百度一下,你就知道......
nc和curl模拟http服务器和客户端
将上面百度返回的东西保存在文件中,然后启动nc服务作为http服务器
nc -l 8080 < nihao.log
这里是文件内容
HTTP/1.1 200 OK
Accept-Ranges: bytes
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 14615
Content-Type: text/html
Date: Mon, 23 Sep 2019 08:53:55 GMT
Etag: "5d7f08a7-3917"
Last-Modified: Mon, 16 Sep 2019 03:59:35 GMT
P3p: CP=" OTI DSP COR IVA OUR IND COM "
Pragma: no-cache
Server: BWS/1.1
Set-Cookie: BAIDUID=E8935128A72FDC316F7E6D108ED759EC:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-a
Set-Cookie: BIDUPSID=E8935128A72FDC316F7E6D108ED759EC; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2
Set-Cookie: PSTM=1569228835; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=
Vary: Accept-Encoding
X-Ua-Compatible: IE=Edge,chrome=1
百度一下,你就知道这里响应实体
使用curl作为客户端访问
# -v可以显示响应头信息
curl 127.0.0.1:8080 -v
nc发送文件和接收文件
启动接收文件的服务
# 使用nc监听端口接收文件并将文件进行解压
nc -l -p 8888 | tar xz
发送文件
# 将当前目录下的app目录进行压缩并发送到指定地址
tar -cz ./app | nc -v 目标IP地址 8888
nc网络测速
在服务器上弄一个大文件,同时监听端口
nc -l -p 9999 < ~/nihao.mp4
在本地机器上进行下载
nc 目标地址 9999 > /dev/null
Linux下使用dstat命令监控当前流量即可
nc循环监听
左洋做是因为nc服务中一旦客户端断开,服务器也会断开.下面就是利用死循环和nc的阻塞属性,使nc服务一旦断开马上就再启动一个.
# 通过grep tar | wc -l来做的行匹配,在不同系统下可能会出现问题.因为grep在不同情况下显示行数不一样.
# 所以推荐使用下面那一种(第二种)
while(true);do date;sleep 10; ps -ef | grep tar | wc -l | awk -F '\n' '{if ($0<3) system("nc -l -v 9999 | tar xz");break; else print "already use"}';done;
#推荐使用 通过监听指定端口判断是否开启服务,兼容性更好.
while(true);do date;sleep 1; lsof -i:9888 | wc -l | awk -F '\n' '{if ($0<3) system("nc -l -v -w2 9888 | tar xz"); else print "already use"}';done;
nc代理ssh
git使用ssh代理要借助第三方工具,比如:nc,通过修改ssh配置文件同时将整个系统的ssh连接走代理
nc 这个工具一般的Ubuntu系统都带的有.没有的话apt insttall nc,Mac使用brew install nc
添加代理
# ServerAliveInterval定时向服务器发送消息以保持连接,防止不操作而断开.需要的时候才添加
echo "ProxyCommand nc -X 5 -x 127.0.0.1:1080 %h %p" >> ~/.ssh/config
echo "ServerAliveInterval 30" >> ~/.ssh/config
取消代理
# Linux直接修改源文件
sed -i '/ProxyCommand/d' ~/.ssh/config
# Mac下只能这么弄,否则提示参数错误
sed '/ProxyCommand/d' ~/.ssh/config > ~/.ssh/config.bk && mv ~/.ssh/config.bk ~/.ssh/config
# 或者
sed '/ProxyCommand/d;/ServerAliveInterval/d' ~/.ssh/config > ~/.ssh/config.bk && mv ~/.ssh/config.bk ~/.ssh/config
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。