2个回答
2013-12-12
展开全部
大家经常讨论SNIFFER,觉得还是很多人没有真正理解SNIFFER,所以把我的一点理解写出来大家共享。
先讲讲HUB的工作原理吧。由于以太网等很多网络(常见共享HUB连接的内部网)是基于总线方式,
物理上是广播的,就是一个机器发给另一个机器的数据,共享HUB先收到然后把它接收到的数据再发给别
的(来的那个口不发了)每一个口,所以在共享HUB下面同一网段的所有机器的网卡都能接收到数据。交换
式HUB的内部单片程序能记住每个口的MAC地址,以后就该哪个机器接收就发往哪个口,而不是像共享HUB那
样发给所有的口,所以交换HUB下只有该接收数据的机器的网卡能接收到数据,当然广播包还是发往所有口。
显然共享HUB的工作模式使得两个机器传输数据的时候别的口也占用了,所以共享HUB决定了同一网段同一时
间只能有两个机器进行数据通信,而交换HUB两个机器传输数据的时候别的口没有占用,所以别的口之间也可
以同时传输。这就是共享HUB与交换HUB不同的两个地方,共享HUB是同一时间只能一个机器发数据并且所有机
器都可以接收,只要不是广播数据交换HUB同一时间可以有对机器进行数据传输并且数据是私有的。
再讲讲网卡的工作原理。网卡收到传输来的数据,网卡内的单片程序先接收数据头的目的MAC地址,根据
计算机上的网卡驱动程序设置的接收模式判断该不该接收,认为该接收就哪薯宴接收后产生中断信号通知CPU,认为
不该接收就丢掉不管,所以不该接收的数据网卡就截断了,计算机根本就不知道。CPU得到中断信号产生中断,
操作系统就根据网卡的驱动程序设置的网卡中断程序地址调用驱动程序接收数据,驱动程序接收数据后放入
信号堆栈让操作系统处理。
有了这HUB、网卡的工作原理就可以讲SNIFFER了。首先,要知道要SNIFFER的东西必须是要物理信号你能收
到的东西。显然只要通知网卡接收其收到的所有包(一般叫作乱模式),在共享HUB下就能接收到这个网段的
所有包,但是交换HUB下就只能是自己的包加上广播包。知道了原理那就好办。要想在交换HUB下接收别人的
包,那就要让其发往你的机器所在口。交换HUB记住一个口的MAC是通过接收到来至于那个口的数据后记住其
源MAC,就像一个机器的IP与MAC对应的ARP列表,交换HUB维护一个物理口(就是HUB上的网线插口,这而的所
有HUB口都是指这)与MAC的表,所以可以欺骗交换HUB的。那样你发一个包设置源MAC是你想接收的机器的MAC,
那么交换HUB就把你机器的网线插的物理口与那个MAC对应起来了,以后发给那个MAC的包就发往你的网线插口
了,也就是你的网卡可以SNIFFER到了。注意这物理口与MAC的表与机器的ARP表一样是动态刷新的,那机器发包
后交换HUB就又记住他的口了,所以实际上是两个在争,这只能应用在只要收听少量包就可以的场合,或者干脆
你弄死要冒牌的机器。还有内部网嘛基于IP的通信你可以用ARP欺骗别人机器让其发给你的机器就可以了,如果
要想不影响原来两方手销的通信,可以欺骗两方,让其都发给你的机器你的机器再转发,就是做中间人,这用ARP加
上编程很容易实现。还有现在很多设备支持远程管理,有很多交换HUB可以设置一个口监听别的口,不过这就要
管理权限了。
拨号用户嘛就是拨号服务器接收到包根据IP分析是哪个拨号用户的包,可能也是通过查找分配拨号用户的IP
与拨号电话线的一个列表,然后就发往那个拨号用户的电话线,所以其相当于交换HUB,但这儿是用的IP,交换
HUB是用的MAC,所以拨号用户能接收到自己的包。相应的要想接收别的包就得欺骗拨号服务器,当然这不是交换
HUB那么好欺骗,因为显然拨号服务器的IP与电话线的列表不是交换HUB那么维护的,可以看能不能破了拨号服务
器改其驱动让其所有包都发给你,显然不太可能了。:(
下面是3COM网卡驱动程序,结合此程序讲讲网卡的原理,你可以对照程序理解。可能有的网卡有些不一样,
但大致原理一样,所以理解很多东西不能完全照搬。
一般网卡有个网卡地址MAC,这地址网卡厂家得申请,每个厂家得到一段地址,不同厂家不同就像IP地址的分
配一样李银,然后用这段地址分配给其生产的每个网卡一个地址。一般说来网卡厂家保证每个网卡地址不同,实际上
网卡地址一般不是放在网卡内部程序里,因为网卡内程序一般都是固化的,相同网卡所有网卡的程序全部一样,
还有很多网卡可以配置支持很多方式,所以一般网卡都带一个EEPROM存储器,网卡地址MAC就放这里面。其实网
卡接收包有几种方式,接收指定MAC地址的包、广播包、组播包、所有的包等,可以对其编程。通常网卡驱动程
序设置的是接收指定MAC地址的包和广播包,如果设置了接收所有的包,就是我们常说的用于SNIFFER的乱模式。
网卡内单片接收指定MAC地址的包的MAC也不是内部程序直接通过EEPROM的数据得到,而是驱动程序通过读E2PROM
得到MAC,再把这MAC告诉网卡的MAC寄存器,网卡的内部程序通过MAC寄存器得到的,并且以此为标准。所以只要
改驱动程序把你想要的MAC告诉MAC寄存器那么就得到你想要的MAC了。
先讲讲HUB的工作原理吧。由于以太网等很多网络(常见共享HUB连接的内部网)是基于总线方式,
物理上是广播的,就是一个机器发给另一个机器的数据,共享HUB先收到然后把它接收到的数据再发给别
的(来的那个口不发了)每一个口,所以在共享HUB下面同一网段的所有机器的网卡都能接收到数据。交换
式HUB的内部单片程序能记住每个口的MAC地址,以后就该哪个机器接收就发往哪个口,而不是像共享HUB那
样发给所有的口,所以交换HUB下只有该接收数据的机器的网卡能接收到数据,当然广播包还是发往所有口。
显然共享HUB的工作模式使得两个机器传输数据的时候别的口也占用了,所以共享HUB决定了同一网段同一时
间只能有两个机器进行数据通信,而交换HUB两个机器传输数据的时候别的口没有占用,所以别的口之间也可
以同时传输。这就是共享HUB与交换HUB不同的两个地方,共享HUB是同一时间只能一个机器发数据并且所有机
器都可以接收,只要不是广播数据交换HUB同一时间可以有对机器进行数据传输并且数据是私有的。
再讲讲网卡的工作原理。网卡收到传输来的数据,网卡内的单片程序先接收数据头的目的MAC地址,根据
计算机上的网卡驱动程序设置的接收模式判断该不该接收,认为该接收就哪薯宴接收后产生中断信号通知CPU,认为
不该接收就丢掉不管,所以不该接收的数据网卡就截断了,计算机根本就不知道。CPU得到中断信号产生中断,
操作系统就根据网卡的驱动程序设置的网卡中断程序地址调用驱动程序接收数据,驱动程序接收数据后放入
信号堆栈让操作系统处理。
有了这HUB、网卡的工作原理就可以讲SNIFFER了。首先,要知道要SNIFFER的东西必须是要物理信号你能收
到的东西。显然只要通知网卡接收其收到的所有包(一般叫作乱模式),在共享HUB下就能接收到这个网段的
所有包,但是交换HUB下就只能是自己的包加上广播包。知道了原理那就好办。要想在交换HUB下接收别人的
包,那就要让其发往你的机器所在口。交换HUB记住一个口的MAC是通过接收到来至于那个口的数据后记住其
源MAC,就像一个机器的IP与MAC对应的ARP列表,交换HUB维护一个物理口(就是HUB上的网线插口,这而的所
有HUB口都是指这)与MAC的表,所以可以欺骗交换HUB的。那样你发一个包设置源MAC是你想接收的机器的MAC,
那么交换HUB就把你机器的网线插的物理口与那个MAC对应起来了,以后发给那个MAC的包就发往你的网线插口
了,也就是你的网卡可以SNIFFER到了。注意这物理口与MAC的表与机器的ARP表一样是动态刷新的,那机器发包
后交换HUB就又记住他的口了,所以实际上是两个在争,这只能应用在只要收听少量包就可以的场合,或者干脆
你弄死要冒牌的机器。还有内部网嘛基于IP的通信你可以用ARP欺骗别人机器让其发给你的机器就可以了,如果
要想不影响原来两方手销的通信,可以欺骗两方,让其都发给你的机器你的机器再转发,就是做中间人,这用ARP加
上编程很容易实现。还有现在很多设备支持远程管理,有很多交换HUB可以设置一个口监听别的口,不过这就要
管理权限了。
拨号用户嘛就是拨号服务器接收到包根据IP分析是哪个拨号用户的包,可能也是通过查找分配拨号用户的IP
与拨号电话线的一个列表,然后就发往那个拨号用户的电话线,所以其相当于交换HUB,但这儿是用的IP,交换
HUB是用的MAC,所以拨号用户能接收到自己的包。相应的要想接收别的包就得欺骗拨号服务器,当然这不是交换
HUB那么好欺骗,因为显然拨号服务器的IP与电话线的列表不是交换HUB那么维护的,可以看能不能破了拨号服务
器改其驱动让其所有包都发给你,显然不太可能了。:(
下面是3COM网卡驱动程序,结合此程序讲讲网卡的原理,你可以对照程序理解。可能有的网卡有些不一样,
但大致原理一样,所以理解很多东西不能完全照搬。
一般网卡有个网卡地址MAC,这地址网卡厂家得申请,每个厂家得到一段地址,不同厂家不同就像IP地址的分
配一样李银,然后用这段地址分配给其生产的每个网卡一个地址。一般说来网卡厂家保证每个网卡地址不同,实际上
网卡地址一般不是放在网卡内部程序里,因为网卡内程序一般都是固化的,相同网卡所有网卡的程序全部一样,
还有很多网卡可以配置支持很多方式,所以一般网卡都带一个EEPROM存储器,网卡地址MAC就放这里面。其实网
卡接收包有几种方式,接收指定MAC地址的包、广播包、组播包、所有的包等,可以对其编程。通常网卡驱动程
序设置的是接收指定MAC地址的包和广播包,如果设置了接收所有的包,就是我们常说的用于SNIFFER的乱模式。
网卡内单片接收指定MAC地址的包的MAC也不是内部程序直接通过EEPROM的数据得到,而是驱动程序通过读E2PROM
得到MAC,再把这MAC告诉网卡的MAC寄存器,网卡的内部程序通过MAC寄存器得到的,并且以此为标准。所以只要
改驱动程序把你想要的MAC告诉MAC寄存器那么就得到你想要的MAC了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询