6

tcpdump用来调试 SSDP 服务。

$ sudo tcpdump -Aq udp port 1900

在打印 UDP 数据包时,在我认为是 IP 和 UDP 标头的 HTTP 标头之前,我遇到了很多乱码。如何禁止打印这些,只打印数据包中的应用程序级数据(包括 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
4

1 回答 1

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 ~]$

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

while ($line=<STDIN>) {
    if ($line!~/239.255.255.250.+?UDP/) {
        if ($line=~/(NOTIFY.+)$/) {
            print "$1\n";
        } else {
            print $line;
        }
    }
}
于 2012-06-03T12:10:21.320 回答