嗅探C中的所有网络流量

时间:2015-02-16 12:54:59

标签: c linux sockets networking

我正在寻找制作小型网络嗅探器和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循环时的原始套接字接收所有传入的数据包。   这是因为它没有绑定到特定的地址或端口。

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

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

我应采取哪种方法来嗅探所有网络流量(例如:netsniff-ng,Wireshark)?

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

1 个答案:

答案 0 :(得分:2)

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

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

  1. 交换机仍然看不到其他交换机/路由器没有发送给它的数据包。混杂模式不会传播 - 否则,您很快就会获得通过Internet在任何地方发送的每个数据包的副本。甚至谷歌或国家安全局都无法处理这种流量。

  2. 如果您的开关不是即插即用类型,系统管理员将禁用此功能。

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

    相关:

    • FedEx Bandwidth:当 - 如果有的话 - 互联网的带宽会超过联邦快递的带宽吗?