我正试图开发一个实用程序,在一个网络中的两个对等体上运行。其工作是识别网络是否真的是一个VPN。需要注意的一个重要属性是--对等体大多属于不同地域不同办公室的不同网络。这种设置的一个重要属性是假设对等体在同一个子网中。如果他们不在,则不允许通信。
对等体之间使用TCP连接进行连接。建立连接后,对等体交换两台机器的连接IP地址。然后两台软件将其网络部分(从适配器获得网络掩码)与自身网络部分进行比较。如果两个网络不匹配,则宣布为VPN。
但是,这种机制不能用于点对点的VPN。
I check if the adapter is a software adapter.
I could also exchange public IPs to know if our public IPs are different.
I could exchange MAC addresses/description of the connected adapters and compare them.
但在我看来,这些似乎都是对症下药的测试,而不是一个明确的测试。
需要大家出出主意。
每一个你能够使用的基于网络的测试都会 "对症下药"。点对点的VPN软件被设计成和以太网上面的IP一样的第3层接口呈现给你,所以一般的 "VPN软件 "你是检测不出来的。这里有几个你可以使用的想法。
另外,你原来检查网络前缀是否不同的测试并不能准确地检测到VPN--当一个局域网上有多个子网在使用时,它会遇到假阳性(即使在小型企业网络中也很常见)。
根据你的实际使用情况,这些方法中的一种很可能就足够了。