【发布时间】:2016-09-29 00:36:09
【问题描述】:
有没有办法查看所有发送到 Linux 计算机的 IPv4 数据包?
我知道我可以使用 libpcap 在以太网级别捕获数据包。这可以工作,但我真的不想对 IPv4 数据包进行碎片整理。 libpcap 是否提供此功能而我只是缺少它?
一种可行的方法是使用tun 设备。我可以通过ip route add default via $TUN_IP dev $TUNID 将所有流量路由到tun 设备来捕获所有IPv4 流量。不过,这也会阻止出站流量,这不是我想要的。
我只想查看 IPv4 数据包,而不是拦截它们。 (或者,更好的是,可选拦截它们。)
编辑:我正在专门寻找一个编程接口来执行此操作。例如。我可以在 C 程序中使用的东西。
【问题讨论】:
-
您必须在自己的程序中执行此操作吗? Wireshark 可以执行 IP 重组。
-
您可以为此使用 iptables。见:stackoverflow.com/questions/23697282/…
-
"这可行,但我并不想对 IPv4 数据包进行碎片整理。" - libpcap/tcpdump 不对流量进行碎片整理。他们甚至明确地捕获/打印片段偏移量和 DF 位。请参阅 tcpdump 手册页中的
IP Fragmentation。 -
我不想我自己对它们进行碎片整理。我希望重新组装的数据包一个接一个地呈现。见编辑:寻找编程接口
-
我希望您知道(通常)有大量其他 IP4 流量没有路由到您的计算机,而是在同一组线路上
标签: c linux sockets networking libpcap