转:工作中常用的Linux命令集锦

时间:2011-4-13     作者:smarteng     分类: Linux命令


tcpdump —— 打印出通过网口流入流出的数据内容,用于网络协议调试

tcpdump就是大家嘴里常说的抓包工具,在linux命令行下,使用tcpdump,可以查看服务器特定端口进出的数据包内容。
tcpdump -X -s0 -i any udp port 12009
上述命令是我在工作中常用的一组参数组合,其含义如下:

  • -X 将每个包打印成16进制形式和ASCII形式,调试新协议的时候非常方便
  • -sN 每个包显示的(截断)字节数,N代表字节数,填0代表64K,为UDP包最大长度,实际实践中UDP包长1500字节左右,如果调试的协议只关心包头,一般查看前128个字节即可,可以视情况而选择。
  • -i 代表interface,可以认为是网卡,any代表任意,也可以填eth0,eth1,代表以太网口
  • udp port 12009是表达式,例子的含义就是UDP协议,12009端口。

tcpdump [ -adeflnNOpqStvx ] [ -c 数量 ] [ -F 文件名 ][ -i 网络接口 ] [ -r 文件名] [ -s snaplen ][ -T 类型 ] [ -w 文件名 ] [表达式 ]

如上是tcpdump命令的完整格式,具体每个参数的含义,可以参看linux的man。

这里简单谈谈最后的那个“表达式”,这个表达式的写法是非常灵活的,使得tcpdump像一个可自由编程的调试工具一样,强大异常。这里可以把表达式理解成是一种编程语言的语句。

  1. 表达式 = 语句 语句 语句 ……
  2. 语句 = 修饰符 | 修饰符 内容

不知道我上面的描述方式,是不是说清楚了表达式的结构,表达式是一个又一个原语(primitives)组成的,每个原语又是由修饰符和数据组成。数据可以数字或者id或者ip或者range等。

修饰符有很多种:

  1. 类型--可以是host(后面跟主机名),net(后面跟ip地址),port(和面跟端口号),如果不指定,默认是host
  2. 方向--可以是src,src or dst,src and dst,dst,主要是源端还是目的端,如果不指定,默认是src or dst
  3. 协议--就比较多了,常用的就udp和tcp,其他的可以看参考

现在再来看看我给的例子,udp port 12009,表示使用UDP协议的,通过12009端口的(进入和出去的)包都显示出来。

tcpdump这个工具还是比较难以记住的,Charels觉得还是要注意理解这个命令的功能和原理,然后在用到的时候,才能快速的找到准确的用法。