如何在 Python3 中找到提供到特定 IP 路由的接口?
How to find the interface offering the route to a specific IP in Python3?
在 Windows 机器上有不同的网络接口可用。这些接口之一是连接到 VPN 服务器的 TAP 接口,具有特定 IP(例如 10.25.1.9
)。要到达主机 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()
在 Windows 机器上有不同的网络接口可用。这些接口之一是连接到 VPN 服务器的 TAP 接口,具有特定 IP(例如 10.25.1.9
)。要到达主机 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()