0

我有一个服务器 (A) 和一个客户端 (B),用 C 编写,在同一台 Linux 机器上运行。服务器将一个端口绑定到 INADDR_ANY,客户端将另一个端口绑定到 INADDR_ANY。当另一个运行在另一台 Linux 机器上的客户端(C)连接到服务器时,我希望服务器获取客户端 B 的 IP 地址并将其发送给客户端 C。

当我从服务器使用 getpeername() 时,它返回“127.0.0.1”,这是正确的,但我无法将此地址发送给客户端 C-它将无法使用该地址连接到客户端 B。

有没有什么聪明的方法可以获取客户端 B 的实际 IP?如果它更容易一些,我可以让每个客户端将其 IP 发送到服务器。

谢谢!

4

2 回答 2

0

使用getifaddrs()获取接口 IP 地址,手册页中有一个示例。请注意,您可以发送任何接口的 IP 地址,因为服务器已绑定使用INADDR_ANY,因此它侦听所有接口。从人ip(7)

在绑定调用中指定 INADDR_ANY 时,套接字将绑定到所有本地接口。

如果您想要公共IP 地址,请参考以下问题:

获取公共/外部 IP 地址?

于 2013-01-07T12:36:49.073 回答
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在生成的套接字上运行。

于 2013-01-07T13:16:04.720 回答