荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: hellsolaris (qq), 信区: Security
标  题: sniffer原理(2)
发信站: 荔园晨风BBS站 (Sat Oct 25 18:14:38 2003), 站内信件

有了这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了。
一、关于MAC:
    1。   for (i = 0; i < 3; i++)
        phys_addr[i] = htons(read_eeprom(ioaddr, i));
读EEPROM中的MAC,有差不多的两个地方,可能是ISA、PCI总线网卡的差别,每次读出来
的是字(两个字节)。
       static ushort read_eeprom(short ioaddr, int index)
{
        outw(EEPROM_READ + index, ioaddr + 10);
        /* Pause for at least 162 us. for the read to take place. */
        udelay (500);
        return inw(ioaddr + 12);
}
这是读EEPROM的数据的函数调用,看这很可能有可以写EEPROM数据的可能,就是E2PROM
里面的MAC数据可以改写,
原来很多网卡有设置程序可以指定其MAC地址的,所以。。。
2。 memcpy(dev->dev_addr, phys_addr, sizeof(phys_addr));
   EEPROM中读出来的MAC地址拷贝到DEV_ADDR中。
3。  for (i = 0; i < 6; i++)
        outb(dev->dev_addr[i], ioaddr + i);
   MAC写入MAC寄存器中,网卡是以写入MAC寄存器的内容为标准,实际上与网卡EEPROM
数据中的MAC无关。还有发
包的时候与源MAC无关,就和现在的IP包发包的时候的源IP可以随便填一样,只是接收包
的时候网卡通过MAC寄存
器内容和接收模式判断该不该接收。当然别人接收包后回复一般都是把收到的包的源MA
C当目的MAC,所以你发包的
源MAC是假的话可能也收不到回复包。
   还有要改MAC只要这儿的DEV_ADDR为你想要的MAC就可以,这儿可以从一个文件读入M
AC地址或者WINDOWS那样从
注册表里面读取MAC内容,这就要看驱动程序额外提供的接口了。


--
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.44.223]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店