我有一个线程,用他监听一个socket,我可以通过什么方法把目的地址是某个IP的包都导向这个socket从而让我的线程可以捕捉到呢?
1,将网卡设置为混杂模式(部分网卡不支持),从而使其他IP的数据不被驱动层过滤掉。
2,安装SNIFER等网管软件,使用其网络相关的驱动,从而可以读取到网卡驱动的缓冲区内存,不能用SOCKET常规的系统API。
3,建议在LINUX环境进行,网络工具丰富些,可使用DSNIFF/ARPSPOOF等
Socket是不行的,因为Socket需要指定特定端口(如果为0则系统分配一个),地址倒是可以绑定。
你这个需求在Windows下可以用Winpcap,Linux下可以用Netfilter或者开发加载Kernel Module到Hook上等方法实现。
Linux使用在netfilter上挂钩子的方法,获取某个源或者目的ip,然后使用netlink将报文的IP头和荷载部分发给应用层
Windows下使用Winpcap可以抓取数据包
我提供个思路,你参考一下。问题:主机收到指定ip的包,记为A.如何通过本机程序B获取A。
思路:指定ip发送数据包时,直接指定放入特定文件夹C。程序B去查找并读取文件夹C中的数据就可以了。对抓包不精通,在此只说一下自己的想法