如何判断两台机子是否在同一局域网?真急啊!

时间:2021-11-17 08:59:17
网上看到,用两台机子的本地IP和子网掩码相与,结果相同时说明在同一网段,但实际这个判断是不对的,我用两台确实不在同一局域网的机子测式,获取的结果是在同一网段,不知有没有正确的方法来判断是否在同一局域网.实在谢谢了!!

14 个解决方案

#1


应该没有办法判断,尤其是通过程序判断。

#2


好像没有呢....
不知判断DNS是否可以?

#3


首先你两台机是不是通过一个路由器连接的,如果是,那通过子网掩码判断是没错的

#4


程序判断没有通用的方法吗?如果不判断同局域网的udp打洞能成功吗?(网内出口的公网IP可能不同)

#5


楼主怎么怎么奔啊,C1发S    S得到C1的路由外网地址,   C2发S        S得到C2的路由外网地址,

将2个地址比较下不就OK了?

#6


网上看到,用两台机子的本地IP和子网掩码相与,结果相同时说明在同一网段,但实际这个判断是不对的,我用两台确实不在同一局域网的机子测式,获取的结果是在同一网段
---------------------
你必须清楚IP地址是靠统一管理而不是技术手段来保证唯一性的...

你说的这种情况一定是所谓用于私有网络的保留地址(例如最常用的192.168.x.x)...通过NAT或Proxy之类的方式连接的...这种地址是不允许在Internet上使用的...

“用两台机子的本地IP和子网掩码相与,结果相同时说明在同一网段”是不包括使用NAT或Proxy之类的情况的...事实上NAT或Proxy隐藏了所谓内部地址...

#7


举个例子,一个办公楼使用宽带上网,楼里的每个公司都有自己的局域网,
公司A ip 192.168.0.1-192.168.0.254 mask 255.255.255.0
公司B ip 192.168.0.1-192.168.0.254 mask 255.255.255.0
然后两个公司都通过自己的路由器连接到办公楼的路由器上面,这种情况在公网上没有办法
判断访问是来自哪个公司的。

#8


是的真是有点不才,才请求帮助.
C1发S S得到C1的路由外网地址,C2发S S得到C2的路由外网地址,都得到了,比较是不一样的,但两台机子确实是同一局域网的.我的意思是通过这种方式比较是不妥的,怎么能在出口地址不一致的情况下判断是否在同一局域网内.谢谢回答! 还是没有解决我的疑惑.

#9


谢谢zhongshan99的回答!看来程序是没法判断了.我是在udp打洞程序里想先判断一下这种情况,因为在同一局域网内(出口公网IP不同)打洞测式总是不通.程序若能判断出来是同一局域网内就不用打洞了.直接能通.

#10


为什么不让两台机器相互确认,比如发个局域网的广播包即可

#11


zswang 说的对.若程序不能判断的话.我就准备用这各方式.

#12


也可以这样来做。

#13


在DOS下有一个命令叫 tracert.exe

是用来查看从本机到另一方的IP间经过我多少个路由网关。

tracert.exe 后直接跟IP地址或主机名,每经过一个路由网关就会有一条新的信息,如果你设置参数 -h 1,就意味着系统只会经过一个路由网关,不管是否找到最终的地址,也会停下来。

相信Socket编程也会有类似的功能吧,这应该归属于ICMP中。

#14


ping /all

#1


应该没有办法判断,尤其是通过程序判断。

#2


好像没有呢....
不知判断DNS是否可以?

#3


首先你两台机是不是通过一个路由器连接的,如果是,那通过子网掩码判断是没错的

#4


程序判断没有通用的方法吗?如果不判断同局域网的udp打洞能成功吗?(网内出口的公网IP可能不同)

#5


楼主怎么怎么奔啊,C1发S    S得到C1的路由外网地址,   C2发S        S得到C2的路由外网地址,

将2个地址比较下不就OK了?

#6


网上看到,用两台机子的本地IP和子网掩码相与,结果相同时说明在同一网段,但实际这个判断是不对的,我用两台确实不在同一局域网的机子测式,获取的结果是在同一网段
---------------------
你必须清楚IP地址是靠统一管理而不是技术手段来保证唯一性的...

你说的这种情况一定是所谓用于私有网络的保留地址(例如最常用的192.168.x.x)...通过NAT或Proxy之类的方式连接的...这种地址是不允许在Internet上使用的...

“用两台机子的本地IP和子网掩码相与,结果相同时说明在同一网段”是不包括使用NAT或Proxy之类的情况的...事实上NAT或Proxy隐藏了所谓内部地址...

#7


举个例子,一个办公楼使用宽带上网,楼里的每个公司都有自己的局域网,
公司A ip 192.168.0.1-192.168.0.254 mask 255.255.255.0
公司B ip 192.168.0.1-192.168.0.254 mask 255.255.255.0
然后两个公司都通过自己的路由器连接到办公楼的路由器上面,这种情况在公网上没有办法
判断访问是来自哪个公司的。

#8


是的真是有点不才,才请求帮助.
C1发S S得到C1的路由外网地址,C2发S S得到C2的路由外网地址,都得到了,比较是不一样的,但两台机子确实是同一局域网的.我的意思是通过这种方式比较是不妥的,怎么能在出口地址不一致的情况下判断是否在同一局域网内.谢谢回答! 还是没有解决我的疑惑.

#9


谢谢zhongshan99的回答!看来程序是没法判断了.我是在udp打洞程序里想先判断一下这种情况,因为在同一局域网内(出口公网IP不同)打洞测式总是不通.程序若能判断出来是同一局域网内就不用打洞了.直接能通.

#10


为什么不让两台机器相互确认,比如发个局域网的广播包即可

#11


zswang 说的对.若程序不能判断的话.我就准备用这各方式.

#12


也可以这样来做。

#13


在DOS下有一个命令叫 tracert.exe

是用来查看从本机到另一方的IP间经过我多少个路由网关。

tracert.exe 后直接跟IP地址或主机名,每经过一个路由网关就会有一条新的信息,如果你设置参数 -h 1,就意味着系统只会经过一个路由网关,不管是否找到最终的地址,也会停下来。

相信Socket编程也会有类似的功能吧,这应该归属于ICMP中。

#14


ping /all