使用tcpdump跳过IP标头

Mat*_*ner 5 python udp tcpdump ssdp

我正在使用tcpdump调试SSDP服务.

$ sudo tcpdump -Aq udp port 1900
Run Code Online (Sandbox Code Playgroud)

打印UDP数据包时,我在HTTP标头之前得到了很多胡言乱语,我认为它是IP和UDP标头.如何禁止打印这些打印,只打印数据包(包括HTTP标头)中的应用程序级数据?

这是一个例子,我不想要的东西是在NOTIFY第二行之前:

14:41:56.738130 IP www.routerlogin.com.2239 > 239.255.255.250.1900: UDP, length 326
E..b..@................l.N..NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900
Run Code Online (Sandbox Code Playgroud)

Mik*_*ton 2

遗憾的是,没有tcpdump甚至没有tshark捷径可以做你想做的事...我们能做的最好的事情就是通过文本过滤器运行 STDOUT...

有些perlsed可能会在我身后缩短这个时间,但它完成了工作......

[mpenning@Bucksnort ~]$ sudo tcpdump -Aq udp port 1900 | perl -e 'while ($line=<STDIN>) { if ($line!~/239.255.255.250.+?UDP/) { if ($line=~/(NOTIFY.+)$/) {print "$1\n";} else {print $line;}}}'
NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900

[mpenning@Bucksnort ~]$
Run Code Online (Sandbox Code Playgroud)

如果添加换行符,STDIN上面列出的 perl 过滤器是...

[mpenning@Bucksnort ~]$ sudo tcpdump -Aq udp port 1900 | perl -e 'while ($line=<STDIN>) { if ($line!~/239.255.255.250.+?UDP/) { if ($line=~/(NOTIFY.+)$/) {print "$1\n";} else {print $line;}}}'
NOTIFY * HTTP/1.1
HOST: 239.255.255.250:1900

[mpenning@Bucksnort ~]$
Run Code Online (Sandbox Code Playgroud)

  • 那家伙从来没有来过:( (2认同)