圖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 抓包工具的截圖
方法1、檢視arp表是最簡單的方法。
方法2、使用libpcap是最可靠的。可以參考linux下網路監聽與傳送資料報的方法(即libpcap、libnet兩種類庫的使用方法)。
方法3、寫自己的網絡卡驅動,應該沒幾個人會這樣搞。
參考鏈結
getting the source hardware address of received udp packets?
kissazi2
在C 中,為什麼建構函式不能有返回值?
1 假設有乙個類c,有如下定義 class c c int i x i private int x 如果c的建構函式可以有返回值,比如int int c x 0 那麼下列 會發生什麼事呢?c c c 此時c.x 1!很明顯,c 呼叫了c的無引數建構函式。該建構函式返回int值1。恰好c有乙個但引數建...
Junit中為什麼不能啟動多執行緒
其實junit是將test作為引數傳遞給了testrunner的main函式。並通過main函式進行執行。test函式在main中執行。如果test執行結束,那麼main將會呼叫system.exit 0 即使還有其他的執行緒在執行,main也會呼叫system.exit 0 system.exit...
為什麼在中斷上下文中不能休眠
這個問題有很多人問過,我看了下linux得核心 原因如下 當然我不能保證一定對,如果有牛人理解得更好,歡迎指正 1.中斷處理的時候,不應該發生程序切換,因為在中斷context中,唯一能打斷當前中斷handler的只有更高優先順序的中斷,它不會被程序打斷 這點對 於softirq,tasklet也一...