================================================================================
ArpCheatSniffer V1.0
Powered by shadow @2005/5/8
my web:http://www.codehome.6600.org
Has bugs please mail to:dreamshadow@mail.sdu.edu.cn
================================================================================
Usage:
-si 源ip
-di 目的ip *代表所有,多项用,号分割
-sp 源端口
-dp 目的端口 *代表所有
-w 嗅探方式,1代表单向嗅探[si->di],0代表双向嗅探[si<->di]
-p 嗅探协议[TCP,UDP,ICMP]大写
-m 最大记录文件,以M为单位
-o 文件输出
-hex 十六进制输出到文件
-unecho 不回显
-unfilter 不过虑0字节数据包
-low 粗略嗅探,丢包率高,cpu利用率低 基本0
-timeout 嗅探超时,除非网络状况比较差否则请不要调高,默认为120秒
-sniffsmtp 嗅探smtp
-sniffpop 嗅探pop
-sniffpost 嗅探post
-sniffftp 嗅探ftp
-snifftelnet 嗅探telnet,以上5个嗅探不受参数si,sp,di,dp,w,p影响.
-sniffpacket 规则嗅探数据包,受参数si,sp,di,dp,w,p影响.
-sniffall 开启所有嗅探
-onlycheat 只欺骗
-cheatsniff 欺骗并且嗅探
-reset 欺骗后恢复
-g [网关ip]
-c [欺骗者ip] [mac]
-t [受骗者ip]
-time [欺骗次数]
Example:
arpsniffer -p TCP -dp 25,110 -o f:/1.txt -m 1 -sniffpacket
嗅探指定规则数据包并保存到文件
arpsniffer -sniffall -cheatsniff -t 127.0.0.1 -g 127.0.0.254
欺骗并且嗅探127.0.0.1与外界的通讯,输出到屏幕
arpsniffer -onlycheat -t 127.0.0.1 -c 127.0.0.2 002211445544 -time 100 -reset
对目标欺骗一百次,欺骗后恢复
Note:
Program for 阿黛,I am very sorry for do this so late.Forgive me~~
================================================================================
帮忙测试一下吧,有bug联系我
我本机测试的时候发现了些bug,不知道是不是我们这边是ipv6的原因
程序和代码都在附件里~
注意程序运行的时候不要用arp.exe的名字,这会产生一个错误,改成任意其他名字就行了
典型的例子如下,譬如我要嗅探本网段中192.168.0.54这台机子与外网段tcp的连接情况,可以这样用:
arpsf -cheatsniff -t 192.168.0.54 -g 192.168.0.254 -sniffpacket -p TCP -dp 80,25,23,110 -o d:/siff.txt -w 0 -m 1
释意:
嗅探192.168.0.54与外网的tcp连接情况并指定目的端口是80,23,25,110,嗅探方式是双向嗅探,最大记录文件是1M,输出到d盘sniff.txt文件中。其中192.168.0.254是网关的地址!也可以改成同网段中其他的地址,那就是网内嗅探了!
我发现的以下bug:
1.本机运行该程序时会使自己上不了网,可能是数据包转发的时候出了点问题。[了解的告诉我一下]
2.在欺骗嗅探的时候会降低对方的网速,程序执行还有优化的地方,希望大家提出比较好的解决方法。
–》其他bug等待大家发现。。。
几点不足:
由于时间仓促,只能分析tcp,udp和icmp三种数据包,等以后有时间了我会把其他包的分析都添上去的~~
注意事项:
在运行该程序前,请先安装winpcap驱动!
================================================================================
编程中遇到的问题:
1.数据包构造问题
由于数据包的大小是固定,多一个字节都会出错,因此在构造结构体的时候尤其要小心,不要忘记vc中对结构体变量大小自动对齐这个问题;所谓自动对齐释疑如下:
在vc里定义结构体的时候,在32bit的模式下,结构体中的变量内存会自动对齐,打个比方吧:[这个问题我是在安焦上看到的,刚好解决了我的arp发送问题]
例有如下结构体:
struct test{
char ch;
int len;
}a;
这个结构体的实际大小实际上是8个字节,因为在32bit下自动对齐,所以ch后面会多出3个字节。
如果不想自动对齐,可以在结构体的前后加上#pragma参数
例如做如下定义:
#pragma pack(push,1)
struct test{
char ch;
int len;
}a;
#pragma pack(pop)
此时的结构体a才是5个字节!
2.数据包转发问题
这个在嗅探中是很重要,如果转发不成功,对方就会断网了。
这里具体的实现你们看代码吧,我只讲两点
一、
用winpacap转发的时候注意这个函数的引用,PacketInitPacket(lpPacket, SZbuff, 60);
在发包前初始化一次PacketInitPacket(lpPacket, SZbuff, 60);在嗅探前初始化回来PacketInitPacket(lpPacket,buffer,256000);
如果要嗅探数据包要确保内存足够大,基本256000就行了。
二、注意在转发数据包的时候不要对自己发出去的然后又拦截下来的数据包重复捕获,否则就陷入死循环了,具体看我代码中的
RebuildPacketAndRedirect()
PacketIsCheatPacket()
PacketIsSelfPacket()
这三个函数的用法!
主要的就这些问题了,希望对大家有所帮助。:)