2009-11-25 81 views
0

我想創建一個用於從數據鏈路層訪問IPv4數據包的套接字。來自unix網絡編程V1,訪問數據鏈路層數據包

socket(PF_PACKET, SOCK_DGRAM, htons(ETH_P_IP)) 

1)我正在實現一個DHCP客戶端,這是做到這一點的正確方法? (意味着不訪問數據鏈路層,我無法從DHCP服務器收到回覆)還是還有其他更簡單的方法? 此外,由於此套接字將接收所有發往我係統的IPv4數據包,我應該如何區分dhcp答覆數據包與其他數據包?

2)請建議我一個很好的鏈接/ tuorial 網絡編程與數據鏈路層訪問。在上面的書中,它不是詳細的描述。

這是my code

+0

我得到了ETH_IP的位置。所以我改變了這個問題。我爲此道歉。請回答上述新問題 – avd 2009-11-25 03:39:12

回答

1

你需要在鏈路層報頭呢?如果是這樣,您需要使用SOCK_RAW - SOCK_DGRAM會在將鏈接層標題提供給應用程序之前刪除鏈接層標題。

可以識別由源端口和目的端口的DHCP請求,因爲DHCP生成的UDP端口67和68

+0

我想我不需要鏈接層標題bcoz我正在實現DHCP客戶端,所以我只需要IPv4標頭。 – avd 2009-11-25 04:58:26

2

你試圖尋找在PCAP庫流量? 它提供了很好的IP,端口和其他東西的過濾功能。

+0

我想自己解析IP幀,以便我可以學習。 – avd 2009-11-25 05:31:14

+0

pcap不解析IP頭或DHCP數據包。正如Jack提到的那樣,它只允許你在內核中過濾*,這樣你的應用程序就不會被不需要的數據包所淹沒。 – bortzmeyer 2009-11-25 20:28:20