文章出處
文章列表
首先,我們要先了解一下UDP包的結構。
圖1 UDP報文格式
從圖1,我們可以看出,從UDP包中,我們可以獲取的信息只有源端口和目的地端口。我們不能獲取到源IP因為報文中沒有源IP。真正包含IP地址的是IPV4偽報頭中。
圖2 UDP包的IPV4偽報頭格式
可以看出,圖1中的UDP包其實是包含在圖2中的,圖2中清楚地指出了包的源地址(source addresses)和目標地址(destination addresses)都在IPv4頭中。圖2的協議是UDP專用的(詳見List of IP protocol numbers):17(0x11)。UDP length指的是UDP頭(head)和數據(data)的長度。
再讓我們通過抓包工具直觀地看一下,見圖3。
圖3 抓包工具的截圖
那么我們如何獲取一個IP地址呢?
方法1、查看ARP表是最簡單的方法。
方法2、使用libpcap是最可靠的。可以參考linux下網絡監聽與發送數據包的方法(即libpcap、libnet兩種類庫的使用方法)。
方法3、寫自己的網卡驅動,應該沒幾個人會這樣搞。
參考鏈接
Getting the source hardware address of received UDP packets?
User Datagram Protocol
文章列表
全站熱搜