【问题标题】:Getting IP address of interface that has route to given host获取具有到给定主机的路由的接口的 IP 地址
【发布时间】:2012-03-14 21:15:21
【问题描述】:

我正在编写一个简单的消息队列库,它基本上可以让您通过 TCP 或 UDP 在两台服务器之间建立点对点消息服务。我想取消客户端/服务器的概念,因为它们两个服务器会做同样的事情(发送和接收消息),所以哪个是哪个并不重要。

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

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

【问题讨论】:

    标签: c++ c linux sockets networking


    【解决方案1】:
    $ 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 网络链接消息来获取信息,你也可以。 src 然后指定用于联系此主机的地址,如果您使用自动绑定(即在连接之前不调用 bind(2),或者使用地址字段的通配符调用 bind)。

    【讨论】:

      【解决方案2】:

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

      相当特别的解决方案。我会让一个正在运行的服务器多播它的存在,而一个新启动的服务器会寻找这些多播,如果它没有找到它们,就将自己作为服务器启动,并通过多播来宣传自己,等等......

      【讨论】:

      • 我的环境有些不可靠,因此可能会出现长时间的网络中断。我认为无法肯定地说我没有收到另一台服务器的消息是因为它没有启动还是因为网络链接已关闭......
      • @gct 那么客户端如何知道服务器的地址呢?
      猜你喜欢
      • 2020-01-07
      • 2011-11-09
      • 2011-10-11
      • 2010-12-26
      • 2011-09-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多