获取具有到给定主机的路由的接口的IP地址

时间:2012-03-14 21:15:21

标签: c++ c linux sockets networking

我正在编写一个简单的消息队列库,它基本上允许您通过TCP或UDP在两台服务器之间设置点对点消息传递服务。我想废除客户端/服务器的概念,因为它们的两个服务器将执行相同的操作(发送和接收消息),因此无论哪个都不重要。

我以为我会通过使用两个服务器的IP地址来决定哪个应该绑定服务器套接字以及哪个应该作为客户端连接(可能通过选择具有最小不等八位字节的那个作为客户端)服务器,假设它不是同一台机器)。

为此,我需要知道具有到另一台计算机的路由的接口[s]的本地IP地址[es]。有没有简单的方法来获取此信息?

2 个答案:

答案 0 :(得分:2)

$ ip route get 2a00:1450:4016:800::1011
2a00:1450:4016:800::1011 from :: via 2a01:4f8:100:63e0::1
    dev eth0  src 2a01:4f8:100:6fab:cdef::1  metric 0 

iproute在内部使用RTM_GETROUTE netlink消息来获取信息,您也可以。然后,src指定用于联系此主机的地址,如果您使用自动绑定(即在连接之前不调用bind(2),或者使用通配符调用bind作为地址字段)。

答案 1 :(得分:1)

  

可能选择具有最小不等八位字节的那个   服务器,假设它不是同一台机器

非常特别的解决方案。我会有一个正在运行的服务器组播它,并且一个新启动的服务器会查找这些多播,并且如果它没有找到它们就开始自己作为服务器,并通过多播来宣传自己,等等......