如果只是一个http业务,一般是不需要调试其TCP流的;但是现在我正在处理一个基于TCP长连接的协议,有时候有任何问题,通过TCP流都可以帮助我调试服务。
但是这只是本地开发时常见的情况,如果要调试测试服务器乃至生产服务器接受的数据流是否正常呢?当然可以在服务器运行tcpdump,比如 tcpdump -i eth0 tcp port 抓包端口号 -w /tmp/debug.cap
,然后将debug.cap从服务器scp到本地来,用wireshark详细研究。
但是有时候调试,服务正常与否跟相应时间什么的也有关系,这种事后研究的方式就不方便了,可以直接ssh服务器,通过tcpdump输出到管道,然后管道这边通过wireshark去抓包分析,省去了scp的麻烦,也能实时调试了。
可以使用命令 ssh fedSDE "sudo tcpdump -s 0 -U -n -i eth0 port 抓包端口号 -w -" | wireshark -k -i -
来轻松做到这点。
不过有时候会有异常,“sudo:抱歉,您必须拥有一个终端来执行 sudo”,则需要使用管理员修改/etc/sudoers,把 Defaults requiretty
这一行注释掉就可以了。
从此妈妈再也不用担心我调试服务器上的流量啦!