netcat

传送一个真实文件,测试网络吞吐

  • server端

    $ sudo nc -l 2223 > /dev/null
  • client端

    1. 生成一个大文件

      $ dd if=/dev/zero of=./disk.img  oflag=direct bs=1M seek=1024 count=0
    2. 计算传送一个大文件所花的时间 

      $ time nc 221.182.254.190 2223 < disk.img

通过ntopng的flow info可以看出实际的网络吞吐,经过与iftop进行对比,ntopng的数据非常精确。ntopng的运行参数为-t 1 -d 1,数据每秒更新一次。

socat

socat可以被用来做udp端口扫描,参考下文

譬如在idc机房中,运营商的公网IP位于防火墙上,内网服务器设置私网ip,用户根据需要向运营商提交端口开放申请。然后运营商在防火墙上再做端口映射。这种方式虽然提高了安全性,但是给用户调试带来很大的麻烦。譬如说在未正式部署应用之前,运营商是否真的将<公网ip:udp:60002>映射<私网ip:udp:60002>,socat就可以用来做此方面的验证工作。

内网服务器

$ sudo socat -v udp-l:60002,fork exec:'/bin/cat'

第二种写法更简洁:

$ sudo socat -v PIPE udp-l:60002,fork

第三种写法:

$ sudo socat - udp-l:60002

说明,该用法时,client端通过nc发送给server端后,server端返回的数据不会回显到client端,因而必须在server端查看才能确认是否有client端的数据传过来。另外,当client端使用nmap -v -sU 10.8.0.193 -p U:60003时,得到错误的结果,而且会导致server端的`socat`进程中止。因而建议结合nmap使用socat用于udp端口扫描。

客户端

$ nc -u 10.8.0.193 60002

登陆成功之后输入:

hello

如果正常的话可以看到回显:

hello

内网服务器中的显示如下:

> 2014/12/07 23:53:42.578116  length=6 from=0 to=5
hello
< 2014/12/07 23:53:42.578934  length=6 from=0 to=5
hello

说明:

  1. 客户端中,nc通过udp连接上了内网服务器的udp:60002;

  2. 客户端输入的`hello`已被内网服务器接收,而且回显给客户机;

  3. socat用来测试udp端口非常有用。