2011-01-19 116 views
2

我工作的一個代碼,我也需要找到發送者的IP地址,發送者的端口號,並通過它發送的應用層數據包。採用socket API查找IP地址和端口號?

我這樣做是使用原始套接字(SOCK_RAW),它運行良好,並做了工作的我,但其過於笨拙。

問題:我可以使用SOCK_STREAM,並直接將應用層數據包,這是很乾淨,簡單的方法比使用原始套接字,但這樣一來我就無法找到客戶端的IP地址和端口號。有沒有辦法,我通過socket描述的任何功能,它告訴我另一端的IP地址和端口號。我閱讀了幾頁手冊,但找不到任何內容。

我正在使用C語言編寫的Linux套接字API。

在此先感謝。 :)

+0

什麼編程語言? C? – 2011-01-19 16:20:14

+0

哦!我很抱歉,我用C在linux下使用套接字API – Durin 2011-01-19 16:21:17

回答

3

當您致電accept()接受傳入連接時,*address是一個填充了發件人的IP地址和端口號的結構。

2

的BSD套接字實現定義一個名爲getpeername()功能,讓知道的IP地址和TCP套接字的遠程端的端口。

,當你有任何SOCK_STREAM連接插座,不管哪方先建立連接,你可以調用這個函數來得到你所需要的信息。 (這比原始套接字要容易得多)。

+0

我知道,鏈接指向的MSDN,但功能應該是在兩個系統上是相同的。 – 2011-01-19 16:24:13