嗅探C中的所有网络流量

Posted

技术标签:

【中文标题】嗅探C中的所有网络流量【英文标题】:Sniffing all network traffic in C 【发布时间】:2015-02-16 12:54:58 【问题描述】:

我正在寻找有关制作小型网络嗅探器和found this one 的最简单的教程。我跟着它,但建议嗅探数据包的方法是:

sock_raw = socket( AF_PACKET , SOCK_RAW , htons(ETH_P_ALL)) ;;
while(1)

  data_size = recvfrom(sock_raw , buffer , 65536 , 0 , &saddr , &saddr_size);

有理:

在 recvfrom 循环中的原始套接字接收所有传入的数据包。 这是因为它没有绑定到特定的地址或端口。

在我看来,这只会监控进出我自己计算机的网络流量,而不是整个 LAN。测试运行证实了我的直觉。

正确吗?这种方法只能嗅探进出我的笔记本电脑的数据包吗?

我应该采用哪种方法来嗅探所有网络流量(即:netsniff-ng、Wireshark)?

我想避免在这种情况下使用 libpcap。

【问题讨论】:

您无法监控不是源自您的 NIC 的流量,或者最终进入其中的流量。没有现有的工具可以帮助您。 【参考方案1】:

这取决于您的网络,尤其是连接一切的路由器和交换机的类型和配置。在大多数安装中,计算机并不直接相互连接。相反,他们与交换机交谈。开关只会向您发送适用于您的计算机的数据包 - 理由是开关精心地将电子推向您是没有意义的,而您只会将其丢弃。

但是计算机可以告诉开关进入“promiscuous mode”。这将配置您的交换机端口,以向您发送交换机看到的每个数据包的副本。有两个问题:

    交换机仍然看不到其他交换机/路由器未发送给它的数据包。混杂模式不会传播 - 否则,您将很快获得通过 Internet 在任何地方发送的每个数据包的副本。即使是 Google 或 NSA 也无法处理这种流量。

    如果您的交换机不是即插即用型,您的系统管理员将禁用此功能。

[编辑] Wireshark 使用libpcap,它是一个低级库,可以完成从配置网络设备到获取和过滤它可以看到的数据包的所有工作。所以你应该尝试找到这个库的源代码,以更好地了解它是如何完成的。

相关:

FedEx Bandwidth:互联网的带宽何时——如果有的话——会超过联邦快递?

【讨论】:

通过 Wireshark,我目前可以看到我的第二台计算机与远程服务器的 HTTP 交互(注意,我的主计算机和第二台计算机都在 WiFi 上,这可能是我可以看到所有流量的原因)。由于我可以使用 Wireshark 监控这种“对话”,因此我试图了解如何使用原始套接字来重现它。 @Juicy Wireshark 正在使用 libpcap 数据包嗅探器 - 像 libpcap - 使用内核提供的接口来获取原始数据包数据。我建议阅读github.com/the-tcpdump-group/libpcap/blob/master/README.linux @Juicy 我必须说对不起!!你对那个原始套接字是正确的。在内核的支持下,AF_PACKET 伪地址族可用于嗅探。从来不知道这一点,总是使用 libpcap 并认为他们正在使用一些 ioctl() 或其他什么。再次抱歉,感谢您指出这一点! :) 我会 AFK 一段时间,但可以稍后尝试构建一个示例...(但是,您仍然没有告诉 为什么您不想使用 libpcap) @hek2mgl 没问题哈哈,简而言之,作为我课程的黑客项目的一部分,我正在演示如何为小型 IP 摄像机创建自定义固件。这个东西的空间很小(播放不到1mb)。使用 dropbear ssh 服务器和 netcat,我还有大约 600kb 可用空间。我正在尝试在其中获得一个非常简单,非常基本的数据包嗅探器,只是“用于表演”,更多的是概念证明。因为我找不到任何小型轻量级数据包嗅探器,所以我想我应该尝试制作一个非常基本的嗅探器,因此我试图避免使用 libpcap 来获取空间。

以上是关于嗅探C中的所有网络流量的主要内容,如果未能解决你的问题,请参考以下文章

附加到进程的 Windows 网络嗅探器

一个 App 可以拦截另一个 App 的网络流量吗?

Linux网络流量监控与分析工具Ntop和Ntopng

如何嗅探在 swf 中处理的 wss (websocket) 流量?

如何在Linux上从命令行嗅探HTTP流量

如何监控局域网实时流量?