当前位置:   article > 正文

如何启动netcat_nc(netcat)工具使用说明加案例

netcat 启动访问

[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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/194648
推荐阅读
相关标签
  

闽ICP备14008679号