我正在用C編寫一個工具,用於記錄在我的Linux系統上運行的不同應用程序的數據使用情況。爲此,我創建了一個原始套接字,然後使用「eth0」(它是我的接口的名稱)綁定它。但我的問題是,這個套接字只捕獲傳入數據包(即:目標MAC地址作爲我係統MAC地址的數據包)。我無法找到任何具有源MAC地址的數據包作爲我係統的MAC地址。所以這意味着我自己的機器寫入的數據包不會被原始套接字捕獲。但我想在兩個方向上捕獲數據包以識別上傳和下載的數據大小。任何人都可以幫忙嗎?使用原始套接字捕獲傳入和傳出數據包
int main()
{
int rs,len;
struct sockaddr_ll addr;
char buf[65535];
rs = socket(PF_PACKET,SOCK_RAW,htons(ETH_ALL));
setsockopt(rs,SOL_SOCKET,SO_BINDDEVICE,"eth0",4);
while(recvfrom(rs,buf,65535,&addr,&len) > 0){
//print packets
}
return 0;
}
感謝您的回覆。但在我的/ usr/include目錄 –
的#define PACKET_MASK_ANY爲0xffffffff/*掩碼包類型位* /#定義 任何PACKET_OUTGOING類型的4/* *呼出/ 的#define PACKET_RECV_TYPE 18 –
沒有沒有宏命名PACKET_MASK_ANY套接字操作宏名爲PACKET_RECV_TYPE。你來自喀拉拉邦嗎? –