如何用代码判断本电脑所在的网络是否处于交换机的环境?(100分)

  • 主题发起人 主题发起人 m8858
  • 开始时间 开始时间
hahahaha....
 
奇怪的需求!??
你应当拦截网络的数据包,从中分析。。。
也许能。。。
 
借貴寶地問個問題,二十年來沒人答出:天上有多少星星啊!哈哈哈[:D][:D]
 
to lngdtommy, 我只是想问一个技术问题,何必拿来恶搞呢? 难道恶搞真的这么流行吗? [:D]
 
我想就算边网卡也不知到它连的是交换机还是集线器,又或者连接了别的网卡。
大家都是按协议办事的,我没看过这个协议写的是什么内容,但是我想这个协议一定没有“设备类型”之类的内容,你就死了这条心吧。。。。。。。。。。。
 
交换机难道没有自己的任何特点吗?
 
有是有,但是这个特点不能从网卡和交换机这段体现出来。对于网卡来说,交换机和集线器都是透明的。网卡永远不会知到有这个些东西存在。
 
交换机是一种桥接设备,而路由器是分组中续设备。
所以
你只要用程序播发一条广播消息,如果你所在网络
环境中的其他机器都能收到,那么,你们中间不存在
路由器,那么你(所在的子网)肯定处在一个没有路由的环境。
//以下属于猜测:
现在你需要写程序取出本机的ARP表,
根据arp表列出你的ip地址访问拓扑图。
如果不是环状网络,那么你一定处于交换机的环境。
注:无论是HUB 还是SWITCH,都是一种矩阵交换设备。
 
呵呵,其实发广播消息还不能知到,因为广播是向所有机器发送的。
  集线器是工作在物理层,它收到信息是不知到发向那个端口的,所有它会所有端口发送这个信息,网卡收到这个信息后会查这个信息的目的地址,如查发现不是发给自己的就丢掉,如果是自己的就接收。
  而交换机工作在链路层,它收到信息后会查它的路由表,如查目的地址在表内,它就向相应的端口发送过去,如果不在就向所有端口发送这个信息。
  根据这个原理,你可以写一个网卡驱动,在网卡收到特定的信息后,不管是不是发给自己的,都返回一个特别的信息,然后再把这个驱动给所有机都装上。这样,你有可能知到是不是交换网了。
  哦,可能这样是不行的,因为丢掉信息是网卡自己处理的,和驱动无关,你应该自己生产一批网卡,然后给所有机都装上。
  如查觉得这样太麻繁,可以自己做集线器,和交换机给它们用,然的用加上自己定义协议。。呵呵。。。。
 
学习高难度
 
的确有难度
hub(集线器)是物理层设备,没有任何处理能力,你可以把它当成一条网线。
switch交换机是数据链路层设备,通过mac地址寻址。
两者没有什么区别可言,因为根本不具备可比性,好比人和石头的区别?
你要判断集线器很难,因为我说了,他和网线是一样的性质,其实如果你学过网络设备就知道,它其实就是一条网线。
发向hub的数据包会分发到每一个端口,交换机上不是,交换机的寻址规则是:通过arp与rarp的协议进行ip/mac的地址定位,如果在某一个端口,就发过去,否则就发到默认网关(一般是路由器)。
而hub的规则好比一个大厅,大家要跟谁讲话都要大声喊。
上面的兄弟有一点说错了,交换机存储的不是路由表,而是mac与ip的对应表。路由表是树状的,只有路由器有这种功能。近些年来出现的3层交换其实就是个路由器模块。
交换机上abc3个端口,a发给b的信息绝对不会被c看到,除非做了端口镜像,但很少见,除非为了入侵监测系统所用。
其实想判断很简单的,交换机可以进行10/100M的全/双工状态协商,而hub不行。当然有些很牛X的hub竟然也是100M的,但是hub绝对不会工作在全双工状态!这一点就可以了,呵呵
 
试着调整一下网卡的工作模式full/harf就知道是否是交换机或者hub了

至于路由器,我想一下,等会回复
 
同志们 看见了吗?  我盼了八年啊! 高人终于出现了!  [:D]  
zdwlp,果然高手啊!
 
大家一起来学习 , 向zdwlp同志致敬!
 
思考了一下,我的确没有见过计算机直接连路由器的,除了adsl那种阉割过的……
一时想不出来……
 
他们在封包处理的时候会把自己的地址信息加入,交换机封装的是数据帧,路由器是数据包,这个可以判断,找个sniffer看一下区别就知道了,底层的数据操作我没写过,但是这可能是唯一的判别方法了。
具体的格式你翻翻rfc吧,我网站上应该有一部分的中文文档man.openbsd.org.cn
 
抓包的话看看winpcap
 
有直接连路由的哦 刚才我还见了 那个路由是TP的 有4个接口 也就是说能接4台电脑 不知道它是什么工作模式
 
后退
顶部