网络中常用的Linux命令, 主要涉及,
time
,dd
,pv
,nc
或者全称netcat
, 还有tcpdump
tcpdump
以后有时间再说, 这一篇写简单点.
time
这个太熟悉了
1 | real 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 | nc -h |
解释一下: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
3nc -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
但是注意, 凡是不加密的传输, 都不安全.
nc
和pv
传输文件? 还是使用SSH
或者SCP
吧, 这样比较安全.emacs的
TRAMP
也不错哦.
tcpdump (重点)
这个在调试, 管理连接方面, 非常有用, 也是网络编程中, 最最常用的东西, 比如说, 你可能会碰上数据鬼打墙
的状况, 这可能就是TCP自连接
问题, 自己连接自己, 然后收发数据.
(发现这个现象, 查看一下连接, 断开, 重置连接就好了)
关于tcpdump的经验总结, 略.