使用socket api查找IP地址和端口号?

时间:2011-01-19 16:17:29

标签: c sockets

我正在编写一个代码,我需要找到发件人的IP地址,发件人的端口号和它发送的应用层数据包。

我使用原始套接字(SOCK_RAW)做到了,它运行正常并为我完成了工作,但它太笨拙了。

问题:我可以使用SOCK_STREAM并直接获取应用程序层数据包,这比使用Raw套接字真的干净简单,但这样我就无法找到IP地址和端口客户编号。有没有我传递套接字描述符的函数,它告诉我另一端的IP地址和端口号。我读了几个手册,但我找不到任何。

我在C语言中使用linux socket api。

提前致谢。 :)

2 个答案:

答案 0 :(得分:3)

当您致电accept()接受传入连接时,*address是一个用发件人的IP地址和端口号填充的结构。

答案 1 :(得分:2)

BSD套接字实现定义了一个名为getpeername()的函数,它允许知道tcp套接字的远程端的IP地址和端口。

当你有任何SOCK_STREAM连接套接字时,无论哪一方首先建立连接,你都可以调用这个函数来获取你需要的信息。 (这比原始套接字容易得多。)