我正在编写一个代码,我需要找到发件人的IP地址,发件人的端口号和它发送的应用层数据包。
我使用原始套接字(SOCK_RAW)做到了,它运行正常并为我完成了工作,但它太笨拙了。
问题:我可以使用SOCK_STREAM并直接获取应用程序层数据包,这比使用Raw套接字真的干净简单,但这样我就无法找到IP地址和端口客户编号。有没有我传递套接字描述符的函数,它告诉我另一端的IP地址和端口号。我读了几个手册,但我找不到任何。
我在C语言中使用linux socket api。
提前致谢。 :)
答案 0 :(得分:3)
当您致电accept()
接受传入连接时,*address
是一个用发件人的IP地址和端口号填充的结构。
答案 1 :(得分:2)
BSD套接字实现定义了一个名为getpeername()
的函数,它允许知道tcp套接字的远程端的IP地址和端口。
当你有任何SOCK_STREAM连接套接字时,无论哪一方首先建立连接,你都可以调用这个函数来获取你需要的信息。 (这比原始套接字容易得多。)