是這樣的,小弟最近在做RawSocket,兩個網卡eth0和eth1(并沒有配置IP),需要把eth0收到的包從eth1發送出去,把eth1收到的包從eth0發送出去,我的socket:fd= socket(AF_PACKET, SOCKET_RAW, htons(0x03));并且將網卡設定為混雜模式。
最后產生了一個現象:從eth1發送出去的包,又被eth1接受。
有沒有哪個設定能只讓socket收到網卡接受的資料包,不管網卡發送的資料包?
x小弟在此謝過大神!
uj5u.com熱心網友回復:
上層自己過濾吧,好像沒現成的。uj5u.com熱心網友回復:
可以通過mac地址過濾一下,判斷源mac地址是本機的就不接收,混雜模式會把所有經過網卡的資料包給捕獲到。uj5u.com熱心網友回復:
樓主你好,你的問題解決了嗎?你是怎么解決的呢?我也遇到了同樣的問題,因為ETH0 ,ETH1是用rawsocket做資料轉發,由于該資料不是本機產生的,所以發出去的幀中源mac并不是網口eth0或eth1本身的MAC地址,所以用樓上2位的方法無法解決問題。
uj5u.com熱心網友回復:
RecvCount = recvfrom(pds->Fd, buf, buflen, MSG_TRUNC, (struct sockaddr *)&recvaddr, &recvlen);/*
sll_pkttype: 表示當前接收的資料包的型別,主要有以下幾種合法的值:
PACKET_HOST 發送給當前主機的包,
PACKET_BROADCAST 廣播資料包,
PACKET_MULTICAST 多播資料包
PACKET_OTHERHOST 因為網卡設定了混雜模式收到的發送給別的主機的包
PACKET_OUTGOING 從本機發出的,不小心loopback到當前socket了
*/
// 屏蔽從本機發出的資料包
if(PACKET_OUTGOING == recvaddr.sll_pkttype)
{
return 0;
}
if(RecvCount < 42)
{
return 0;
}
return RecvCount;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/95454.html
標籤:網絡通信
上一篇:請教一下關于策略路由的問題
