我有socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))
創建了一個socket,我已經用它設置成混雜模式:包插座只接收當地交通
struct ifreq ifr;
strncpy((char*)ifr.ifr_name, interface, IF_NAMESIZE);
if(ioctl(sock, SIOCGIFINDEX, &ifr)<0) fail(2);
struct packet_mreq mr;
memset(&mr, 0, sizeof(mr));
mr.mr_ifindex = ifr.ifr_ifindex;
mr.mr_type = PACKET_MR_PROMISC;
if(setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mr, sizeof(mr)) < 0) fail(2);
的問題是,當我從插座做read()
,它只會返回來自或來自我的計算機的數據。
我怎樣才能讀取並處理網絡上的所有數據包?
Wireshark顯示所有的數據包都很好,所以我知道它不是我的電腦或網卡。 ifconfig
報告它在運行時爲PROMISC
。
Wireshark顯示數據包正常,tcpdump也一樣。 – computergeek6 2009-08-25 00:48:38
確實如此,但套接字仍然不會收到其他流量。 – computergeek6 2009-08-25 01:39:34
我設法修復它在我的最後,這是最有用的答案。謝謝! – computergeek6 2009-08-25 04:13:47