经常有种需求,我想看到我的网卡都有哪些数据出去了,有哪些数据进来了。这种在Window下可以使用ethereal来实现抓包的操作。
这里说的事linux下的经典工具----tcpdump。曾经有一次在排除mysql问题的时候,用到了这个工具,可以将整条sql命令拦截并打印出来。
命令如下:
tcpdump -i eth1 -s 0 -l -w - dst port 3306 |strings
以下为执行的结果,包括截获到的sql语句。
-s为对一个包头掐掉多少个字节,系统默认丢弃包头的用来表示IP等协议的68个字节。-s 0 表示不丢弃包的任何一个字节(不抛弃不放弃)
-l 行缓冲标准输出(不直接将结果输出到标准输出)。tcpdump抓到的包的数据默认直接输出到标准输出。
-w - raw packets to file rather than parsing and printing them out, 写最原始的数据到文件。在这里即“-” 。 “-”指的是标准输出。 -w - 的意思即为将原始的数据写到标准输出。
strings用于显示文件中的可打印字符,即打印此处的tcpdump 出来的raw数据(原始数据)