python - 使用 tcpdump 跳过 IP header

标签 python udp tcpdump ssdp

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

$ sudo tcpdump -Aq udp port 1900

打印 UDP 数据包时,在我认为是 IP 和 UDP header 的 HTTP header 之前,我遇到了很多乱码。我如何禁止打印这些,只打印数据包中的应用程序级数据(包括 HTTP header )?

这是一个例子,我不想要的东西在第二行的 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

最佳答案

遗憾的是没有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 ~]$

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

while ($line=<STDIN>) {
    if ($line!~/239.255.255.250.+?UDP/) {
        if ($line=~/(NOTIFY.+)$/) {
            print "$1\n";
        } else {
            print $line;
        }
    }
}

关于python - 使用 tcpdump 跳过 IP header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10868461/

相关文章:

c - UDP 多客户端服务器基础

go - 缓冲阅读器 VS listenUDP

centos - centos 6.4总是做dns反向查询吗?

python - 持久矩形选择器

python - 将迭代转化为递归

python - Pygame 表面力学

python - Matplotlib 中绘制的点之间的连接线

java - 在没有互联网连接的情况下发送 DatagramPacket - Android

linux - 无法让脚本在后台运行

timestamp - tcpdump 文件中的时间戳