2012-01-02 26 views
2

我試圖以下後找出存儲在「緩衝」的數據結構:ÇPF_PACKET鏈路層處理

sock=socket(PF_PACKET, SOCK_RAW, htons(ETHERTYPE_IP));

recvfrom(sock, buffer, 2048, 0, NULL, NULL);

我想是能夠插入數據結構並在鏈接層,IP層和TCP層讀取(如果它是TCP數據包)。我嘗試了man頁面和一些頭文件,但它只是遍佈整個地方。

在此先感謝。

回答

3

這是通過電線(OSI第2層)的原始位。 man page for packet解釋得很好。

我會做的是得到這個輸出並將它與Wireshark會話的輸出進行比較,查看相同的數據。然後,您應該能夠將兩者關聯起來,看看發生了什麼。

+0

我看過男人7包。根據手冊頁,它指出:「鏈接級別標題信息在sockaddr_ll中以通用格式提供。」如果您查看sockaddr_ll,您會發現該結構無法包含整個IP數據包。 – Philoxopher 2012-01-02 01:48:41

+1

sockaddr_ll只包含鏈接級別*頭信息,而不是整個數據包。其他數據在您的recv緩衝區中。格式取決於您要發送的協議。查看適當協議的RFC,例如IP,TCP等 – mark4o 2012-01-02 04:28:47

+0

如果您查看手冊頁的頂部,可以在#includes中找到定義低級數據包的頭文件(儘管不在結構中,它們使用定義)。 sockaddr_ll只是定義一個地址。 – 2012-01-02 04:50:53