我正在编写一个程序,它可以嗅出libpcap的通信量,只需要取出要修改的数据包,然后用一个原始套接字注入到网络中。我知道,对于无线网卡的正常滥交模式操作,您不应该能够与网络进行交互,但是否可以使用原始套接字进行交互?
最佳答案
简短的回答是肯定的。下面是较长的一个。。。
我知道,对于无线网卡的正常滥交模式操作,您不应该能够与网络交互
我不知道你是从哪里得到这些知识的,但上面的说法是错误的。滥交模式并不限制你能做什么以及如何与网络互动。默认情况下,网络接口卡只是试图减少它们传递给主机的数据量,以获得更好的效率。例如,如果目标MAC地址与接收媒体访问控制器的地址不匹配,则NICs不会将以太网帧传递给主机。滥交模式所做的唯一事情就是简单地告诉设备将它得到的所有信息传递给主机,不管主机的帧地址是不是。换句话说,无论您在正常操作模式下对NIC做了什么,当NIC处于混杂模式时,您仍然可以这样做。另外,NIC不再为您过滤任何内容,因此您可以接收更多内容(只要主机能够处理负载)。
但是,有没有可能使用原始的套接字呢?
是的,这是可能的。只要您有足够的权限,就可以使用“原始”套接字API从用户空间发送和接收以太网帧。一个设备是否处于混乱模式没有任何区别。
还要注意的是,现在的路由器非常智能,即使你把主机的网卡设置为混杂模式,它们也不会向你的主机转发数据包。因此,在正确的网络中,您不太可能接收到任何事实上不适合您的主机的内容,而滥交模式也不会有任何区别。
如果这有帮助,here是一个通过以太网与PC连接的FPGA板交换自定义数据包的简单示例。它使用原始的socket API并在Linux上的用户空间中运行。