曲径通幽论坛

 找回密码
 立即注册
搜索
查看: 12552|回复: 0
打印 上一主题 下一主题

nc -- TCP/UDP 连接与监听工具

[复制链接]

4918

主题

5880

帖子

3万

积分

GROAD

曲径通幽,安觅芳踪。

Rank: 6Rank: 6

积分
34387
跳转到指定楼层
楼主
发表于 2012-10-30 12:05:26 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
nc 全名 Netcat ,又被称为网络的”瑞士军刀“,具有强大的网络操作功能。在 Windows 上玩渗透入侵的朋友对该工具并不陌生。实际上,Linux 和 Windows 上的版本特性基本相同。下面演示一些使用实例。

1. 直接使用 nc 连接
在 Windows 上如下使用 nc 在 2012 端口上监听:
C:\> .\nc.exe -lp 2012
其中 -l 选项表示要处于监听模式,-p 参数指定要在哪个端口上监听。

在 Linux 上直接用下面命令连接:
$ nc 192.168.1.110 2012
此时,连接已经建立。可以尝试分别在 Windows 和 Linux 下输入一些内容,可以看到当按下回车发送出去时,所输入的内容会出现在对方的终端上:



1.1 测试 UDP 端口是否开放
指定 -u 选项可以使 nc 监听在 UDP 模式,同样连接时使用 -u 选项表示基于 UDP 协议连接,而不是 TCP 。如同上面例子,可以使服务端在 UDP 的某个端口上监听:
nc -ul 7777
客户端连接时使用:
nc -u server_name 7777
然后在客户端输入一些内容,如果服务端能收到,那么说明连接通常,端口并没有被防火墙所阻挡。

2. 在 8080 端口上建立一个只服务一次的 WEB 服务器
运行下面的命令:
{ echo -n "HTTP/1.0 200 OK\r\n\r\n"; cat hello.txt; } | nc -l 8080
在上面命令中,nc 使系统在 8080 端口监听。管道符前面输送过来一些模拟了 HTTP 头及网页主体的内容。在使用浏览器打开 http://网址:8080 后,会发现浏览器中内容一闪而过,然后显示该页无法显示,这是因为 nc 所建立的监听服务只服务一次,它在将前面的网页内容输出后进程退出。此时我们可以看到 nc 的输出:
$ { echo -n "HTTP/1.0 200 OK\r\n\r\n"; cat hello.txt; } | nc -l 8080
GET / HTTP/1.1
Host: 192.168.1.105:8080
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.1 (KHTML, like Gecko) Maxthon/3.0 Chrome/22.0.1229.79 Safari/537.1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
DNT: 1
Accept-Encoding: gzip,deflate
Accept-Language: zh-CN
Accept-Charset: GBK,utf-8;q=0.7,*;q=0.3
这些内容是客户端浏览器发送过来的 HTTP 的头部请求。

3. 使用 -w 选项限定空闲时间
在服务端,可以使用 -w 选项来设置空闲时间限制。也就是说,当连接空闲超时时,连接会自动断开。注意,-w 选项并不会影响 -l 选项,也就是说,如果还没有连接进来时,即使超出了超时时间,那么服务端的监听并不会自动断开。这里的超时是相对于连接来说的。比如下面服务端的设定:
nc -l 7777 -w 10
上面设定 10 秒超时。客户端连接后,如果 10 秒中内无任何动作,那么连接自动断开。

4. 使用 nc 进行端口扫描
[beyes@beyes   ~]$ nc -v -n -z -w 1 192.168.1.2 75-85
nc: connect to 192.168.1.2 port 75 (tcp) failed: Connection refused
nc: connect to 192.168.1.2 port 76 (tcp) failed: Connection refused
nc: connect to 192.168.1.2 port 77 (tcp) failed: Connection refused
nc: connect to 192.168.1.2 port 78 (tcp) failed: Connection refused
nc: connect to 192.168.1.2 port 79 (tcp) failed: Connection refused
Connection to 192.168.1.2 80 port [tcp/*] succeeded!
nc: connect to 192.168.1.2 port 81 (tcp) failed: Connection refused
nc: connect to 192.168.1.2 port 82 (tcp) failed: Connection refused
nc: connect to 192.168.1.2 port 83 (tcp) failed: Connection refused
nc: connect to 192.168.1.2 port 84 (tcp) failed: Connection refused
nc: connect to 192.168.1.2 port 85 (tcp) failed: Connection refused
上面,-v 选项表示希望输出详细信息。-n 选项表示不进行 DNS 查询。-z 选项表示使用扫描模式。-w 选项表示设置扫描超时时间。

5. 使用 nc 做代理
我们尝试下面的命令:
nc -l 8899 | nc www.twitter.com 80
我们的本意是,通过发浏览器访问 http://server-ip:8899 以能访问 twitter 网站。但是在操作中会观察到,服务器端是有来自 twitter 的内容输出到终端,而浏览器端却没有任何内容。这是因为,管道 '|' 是单向的,而不能反向。如果想反向,我们需要用到有名管道。因此可以先建立一个有名管道
# mkfifo tunnel
# ls -l tunnel
prw-r--r-- 1 root root 0 Oct 30 11:35 tunnel
接下来,使用 nc 来做一个简单的代理:
# nc -l 8899 0<tunnel |nc www.twitter.com 80 1>tunnel
上面的意思是,先使 nc 监听在 8899 端口。如果客户端访问服务器的 8899 端口,那么就将请求通过管道送到另一边的 nc 命令中,该 nc 命令再将请求内容发往 www.twitter.com ,当 www.twitter.com 响应时,所返回网站内容默认输出到标准输出上(文件描述符为 1),此时我们将这些内容重定向到 tunnel 这个有名管道中,一旦管道有了内容,它就输送到标准输入(0),接着标准输入的内容被左端的 nc 接收,最后 nc 就将这些内容返回到客户端去。效果见下图:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|曲径通幽 ( 琼ICP备11001422号-1|公安备案:46900502000207 )

GMT+8, 2024-6-2 18:08 , Processed in 0.065722 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表