我有一个用C语言编写的服务器(A)和客户端(B),在同一台Linux机器上运行。 服务器将端口绑定到INADDR_ANY,客户端将另一个端口绑定到INADDR_ANY。 当另一个在另一台 Linux机器上运行的客户端(C)连接到服务器时,我希望服务器获取客户端B的IP地址并将其发送到客户端C.
当我从服务器使用getpeername()时,它返回“127.0.0.1”,这是正确的,但我无法将此地址发送到客户端C-它将无法连接到客户端B那个地址。
有没有聪明的方法来获取客户端B的实际IP? 如果它更容易一些,我可以让每个客户端将它的IP发送到服务器。
谢谢!
答案 0 :(得分:0)
使用getifaddrs()获取接口IP地址,手册页中有一个示例。请注意,您可以使用INADDR_ANY
发送服务器绑定的任何接口的IP地址,以便侦听所有接口。来自人ip(7)
当在bind调用中指定INADDR_ANY时,套接字将是 绑定到所有本地接口。
如果您想要公共 IP地址,请参阅此问题:
答案 1 :(得分:0)
您实际想知道的是接口的IP地址,该地址将用于路由到客户端C.
使用Linux命令行,您可以执行此操作(假设C为10.0.0.1):
# ip route show match 10.0.0.1
default via 20.0.0.2 dev eth0
# ifconfig eth0
eth0 Link encap:Ethernet HWaddr 00:00:00:00:00:00
inet addr:20.0.0.3 Bcast:20.0.0.255 Mask:255.255.255.0
在这种情况下,您需要使用20.0.0.3
。
问题仍然是如何在C中获得所有这些。
一种方法是连接到C上的某个服务,并在生成的套接字上运行getsockname
。