如何在Python3中找到提供到特定IP的路由的接口



在Windows机器上,有不同的网络接口可用。其中一个接口是连接到具有特定IP(例如10.25.1.9(的VPN服务器的TAP接口。为了到达主机10.2.1.1,路由通过该接口。

我想启动一个本地python服务器程序并将其绑定到这个接口,所以我需要知道要绑定的IP地址。由于这个本地服务器程序要安装在几个我不知道IP地址的机器上,所以我想自动找到这个IP
机器上可能安装了多个VPN连接,因此无论是IP地址前缀都不明确,也不能安全地假设接口名称是唯一的。

关于接口,我所知道的唯一安全的一点是,通过它可以访问主机10.2.1.1(我可能会在该主机上测试一些简单的服务,以确保这是正确的服务(。

我看了netifaces,但它没有提供此功能。我还看了PyRoute2,但这在Windows机器上不可用。

所以,我的问题仍然是:我如何找到到我的VPN基本主机10.2.1.1的路由通过哪个接口,以便我可以使用该IP进行绑定?

如果远程主机上有任何已知的服务要连接,请使用socket.getsockname()找出用于连接的本地IP:

import socket
# connect to known destination, e.g. via UDP port 80
test_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
test_sock.connect(("10.2.1.1", 80))
# check which local IP was used to connect
with test_sock:
private_ip, *_ = test_sock.getsockname()

最新更新