技术: 网络开发常用工具

整理和重新发布一下网络编程中的调试&测试工具.

网络中常用的Linux命令, 主要涉及, time, dd, pv, nc或者全称netcat, 还有tcpdump

tcpdump以后有时间再说, 这一篇写简单点.

time

这个太熟悉了

1
2
3
real	0m0.000s
user 0m0.000s
sys 0m0.000s

主要是来统计某个程序运行的时间, 分为用户时间内核时间.

dd

我以前在加密打包的时候用到过dd工具, 它比较适合处理字节块.

例如你可以拿它去测量拷贝数据的时间, 即磁盘跑分:

1
dd if=/dev/zero of=sun.txt bs=100M count=10

从/dev/zero不断拿0字符, 拿100M大小的数据块x1, 写到sun.txt, 统计操作所花费的时间, 以及写入速度.
其中bs 代表块, 它可以使用下面的单位:

字节(1B)    c 
字(2B)    w 
块(512B)    b 
千字节(1024B)    k 
兆字节(1024KB)    M 
吉字节(1024MB)    G

当然还有其他参考, 不过我常用的就这么多了.

nc (重点)

或者叫做 netcat, 不同的Linux或者Unix可能有不同的实现版本, 所对应的参数也不一样.

常用的参数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
nc -h
[v1.10-41+b1]
connect to somewhere: nc [-options] hostname port[s] [ports] ...
listen for inbound: nc -l -p port [-options] [hostname] [port]
options:

-c shell commands as `-e'; use /bin/sh to exec [dangerous!!]
-e filename program to exec after connect [dangerous!!]
-b allow broadcasts
-g gateway source-routing hop point[s], up to 8
-G num source-routing pointer: 4, 8, 12, ...
-h this cruft
-i secs delay interval for lines sent, ports scanned
-k set keepalive option on socket
-l listen mode, for inbound connects
-n numeric-only IP addresses, no DNS
-o file hex dump of traffic
-p port local port number
-r randomize local and remote ports
-q secs quit after EOF on stdin and delay of secs
-s addr local source address
-T tos set Type Of Service
-t answer TELNET negotiation
-u UDP mode
-v verbose [use twice to be more verbose]
-w secs timeout for connects and final net reads
-C Send CRLF as line-ending
-z zero-I/O mode [used for scanning]

port numbers can be individual or ranges: lo-hi [inclusive];
hyphens in port names must be backslash escaped (e.g. 'ftp\-data').

解释一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[-hlnruz][-g<网关...>][-G<指向器数目>][-i<延迟秒数>][-o<输出文件>][-p<通信端口>][-s<来源位址>]
[-v...][-w<超时秒数>][主机名称][通信端口...]
其他参数:
-g<网关> 设置路由器跃程通信网关,最丢哦可设置8个。
-G<指向器数目> 设置来源路由指向器,其数值为4的倍数。
-h 在线帮助。
-i<延迟秒数> 设置时间间隔,以便传送信息及扫描通信端口。
-l 使用监听模式,管控传入的资料。
-n 直接使用IP地址,而不通过域名服务器。
-o<输出文件> 指定文件名称,把往来传输的数据以16进制字码倾倒成该文件保存。
-p<通信端口> 设置本地主机使用的通信端口。
-r 乱数指定本地与远端主机的通信端口。
-s<来源位址> 设置本地主机送出数据包的IP地址。
-u 使用UDP传输协议。
-v 显示指令执行过程。
-w<超时秒数> 设置等待连线的时间。
-z 使用0输入/输出模式,只在扫描通信端口时使用。
-q 超时退出时间

nc 往指定端口发送数据, 例如:
nc localhost 3306 < xxx.txt 向本机的3306端口发送数据
或者
dd if=/dev/zero bs=100M count=10 | nc localhost 3306 向本机3306端口发送数据, 同时dd统计.

当然你用time统计也可以:
time nc localhost 3306 < xxx.txt

别人(与我IP不同)要取得数据?
直接连接我的IP, 3306端口即可, 例如: nc <my_ip> 3306 > xxx.txt,
如果是发送的压缩文件, 或者发送的识货用tar处理了, 例如:
tar -zcvf - xxx.txt | pv | nc -l -p 3306 -q 5, 那么接收的时候要进行相应的解压缩, 例如:
nc <target_ip> 3306 | pv | tar -zxvf -

如果是我向你的端口写, 那么你直接连接你的端口即可获取数据, 例如:
写:
nc <ur ip> <ur port> < /dev/zero 或者你可以使用dd, 做一下网络带宽写出速度统计
dd if=/dev/zero bs=1MB count=1000 | nc <ur_ip> <ur_port>

接收端, 就非常好办了:
nc -l <port> >/dev/null 或者看看进度 nc -l <port> |pv -W > /dev/null
(你要保留文件的话, 就不要把它重定向到/dev/null了)

注意这里的接收端, 不要写ip选项 (我实验了一下, 如果指定了localhost返回会出问题)

当然也可以进行端口扫描(即-z选项):

1
2
3
nc -v -z -w2 192.168.0.3 1-100     扫描192.168.0.3 的端口 范围是 1-100.
nc -u -z -w2 192.168.0.1 1-1000 扫描192.168.0.3 的端口 范围是 1-1000不过扫描的是UDP端口
nc -nv 192.168.0.1 80 扫描 80端口

查看目录下文件大小: ls -lh; 查看文件的大小: du -sh <filename>

pv

pv, 即pip viewer; 它会显示当前在命令行执行的命令的进度信息 sudo apt-get install pv .
pv 命令提供了多种显示选项开关:

  • -p来显示百分比
  • -t来显示时间
  • -r表示传输速率
  • -e 代表eta(LCTT 译注:估计剩余的时间)

好事是你不必记住某一个选项,因为默认这几个选项都是启用的。但是,如果你只要其中某一个信息,那么可以通过控制这几个选项来完成任务。

这里还有一个-n选项来允许 pv 命令显示整数百分比,在标准错误输出上每行显示一个数字,用来替代通常的可视进度条, 但是会分行打印, 个人不推荐

接下来还有一个命令行选项,-L 可以让你修改 pv 命令的传输速率。举个例子,使用 -L 选项来限制传输速率为2MB/s。

1
pv -L 2m xxx.mkv > ./Desktop/yyy.mkv

这条命令等价于 cp xxx.mkv > ./Desktop/yyy.mkv | pv -L 2m
(Pv测试管道前面紧邻的任务)

另一个pv 可以帮上忙的情景是压缩文件。这里有一个例子可以向你解释如何与压缩软件Gzip 一起工作。

pv /media/himanshu/1AC2-A8E3/fnf.mkv | gzip > ./Desktop/fnf.log.gz

但是注意, 凡是不加密的传输, 都不安全.

ncpv传输文件? 还是使用SSH或者SCP吧, 这样比较安全.

emacs的TRAMP也不错哦.

tcpdump (重点)

这个在调试, 管理连接方面, 非常有用, 也是网络编程中, 最最常用的东西, 比如说, 你可能会碰上数据鬼打墙的状况, 这可能就是TCP自连接问题, 自己连接自己, 然后收发数据.
(发现这个现象, 查看一下连接, 断开, 重置连接就好了)

关于tcpdump的经验总结, 略.

文章目录
  1. 1. time
  2. 2. dd
  3. 3. nc (重点)
  4. 4. pv
  5. 5. tcpdump (重点)
|