首页
社区
课程
招聘
[旧帖] [原创]局域网监视小助手V1(有图有源码) 0.00雪花
2012-8-15 15:57 5606

[旧帖] [原创]局域网监视小助手V1(有图有源码) 0.00雪花

2012-8-15 15:57
5606
制作目的:
主要是锻炼一下网络编程能力,同时也希望做出来的东西有点小用处,如恶作剧等;

实现原理:
先根据指定IP获取被监视主机的MAC地址,然后启动一条线程每隔一段时间不停的向其发送ARP欺骗包,使被监视主机网关的MAC地址指向我们机器,这样对方上网的所有数据包都会传递到我们这里;同时再启动另一条线程用于接收对方主机发送过来的数据包,解析数据包得要想要的信息,随后修改数据包源地址等信息后发送到正确的网关,这样响应包也就会先到我们的机器,此时我们可以篡改响应数据,完成之后再修改响应包的目的地址等信息,使其能够正确转发到被监视主机上;总而言之,对被监视主机来说我们就是网关;

完成功能:
目前时间预算较紧,只实现了记录HTTP请求的功能,根据自定义条件过滤、篡改数据包等功能暂未实现,有时间再做V2版本,到时加入过滤及篡改功能;

补充说明:
成功监视的前提是能够ARP欺骗成功,但是目前大部分PC机器可能都装了360等带ARP防火墙的软件,所以针对PC很难成功;但是手机还是一块空白区域,大家有兴趣可以试下;

使用图示:
1、假如检测到本机有多块网卡适配器,则需要手动选择一块可用的网卡进行收发包操作;


2、接下来会进入初始化阶段


3、这是主界面,如果知道被监视主机的IP,可以直接输入


4、双击监视结果列表项会弹出请求包信息对话框


5、假如不知道被监视主机的IP,可以单击“扫描可用地址”打开扫描对话框


PS:不好意思,获取网关信息原先代码弄错了o(╯□╰)o,现已修正,重新上传源码及程序;

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (48)
雪    币: 142
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiejienet 2012-8-15 17:27
2
0
膜拜...
arp欺骗真的能用吗?
雪    币: 39
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
随风逝去 2012-8-15 18:00
3
0
楼主我选择网卡后怎提示错误“无法正常启动:获取所选网卡适配器MAC地址失败”啊
雪    币: 107
活跃值: (73)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
nopnopnop 1 2012-8-15 20:33
4
0
我这边重新审核了下初始化代码,的确发现有一个bug可能引起此问题,现已重新修改上传程序及源码,你可以重新下载再试试运行下,看看还会不会有问题;
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
木栈道 2012-8-16 10:21
5
0
系统吧 www.xitong8.com
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
ThreadIce 2012-8-16 10:32
6
0
学到了 下下来研究研究
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nkrush 2012-8-16 13:29
7
0
请问楼主,源码是在什么平台下运行的?
能详细一点介绍吗?新手求教!
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nkrush 2012-8-16 13:40
8
0
可能是我弄错了,360一直提醒,紧张了。
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
javvy 2012-8-16 13:54
9
0
前些天,我也想做这个功能。也同样是用winpcap发包,但是出现的情况是目的主机确实把要发送给网关的包发到了我主机上,但是我和目标主机都上不了网,我看了下我的ARP缓存,发现网关IP地址对应的MAC地址也被改成了我自己的MAC地址,不知道是为什么。我用的是win7系统,不知道是不是WIN7系统arp新特性?楼主用的什么系统?

另外你这个好像是双向的欺骗。如果只想单方面欺骗目标主机,不欺骗网关,即目标主机->我的主机->网关; 网关->目标主机,这样的话转发包的时候好像只用修改目的mac地址,也就不需要重新算校验和了,是这样的么?
雪    币: 107
活跃值: (73)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
nopnopnop 1 2012-8-16 14:53
10
0
兄弟,你这话说的有点伤人呀,源码我可是提供的了;
你可以只下载源码进行编译,源码我是在VS2008平台上编译通过的,在xp3跟win7下测试可用;运行的先决条件是需要安装winpcap,因为我需要用它发送我自己构造的原始数据包;

PS:360实行“倒贴”模式后,是不是只要没签名,并且用了一些他认为不安全的API后都会报木马?
雪    币: 107
活跃值: (73)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
nopnopnop 1 2012-8-16 15:05
11
0
1、我的开发环境是xp3,但是程序我在win7上测试过,至少我这边没问题,所以我猜你构造的arp包有问题,具体你可以用Wireshark等软件跟踪一下你发出的数据包;

2、我这个的确是双向的,请求:目的主机->我的主机->网关;响应:网关->我的主机->目的主机;转发请求跟响应时都需要重新计算校验码;这么做的好处就是,将来我可以对截获的响应包做任何事情;同时如果不这么做,我这边的测试发现,目标机器收到网关直接发给他的响应包后,会重新更新arp信息,导致欺骗目的主机会失效;
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
javvy 2012-8-16 15:34
12
0
我程序是单方面欺骗主机,没欺骗网关,构造的ARP包是reply类型的。目的mac地址和ip地址为目标主机的mac地址和ip地址,源mac地址为我的mac地址,源ip地址为网关ip地址。转发包的时候就是把目的mac地址改为网关的mac地址。也用wireshark抓包看过,arp欺骗感觉没问题。

但是发现了一条非常奇怪的arp包。
ARP内容是这样的,源mac和目的mac都为我的mac地址,源ip为我的ip地址,目的ip地址为网关地址,arp类型居然是request.即幀头目的mac地址为我的mac地址,其arp数据里的mac地址也为我的mac的地址,而且类型是请求报文。 这个报文是怎么来的呢?请求报文里,幀头目的mac地址不应该是ff-ff-ff-ff-ff-ff吗?怎么有这么奇怪的报文把我自己的arp缓存给改了?我一结束程序,arp缓存就自动变为正确的了。 我确定这个ARP包不是我程序发出去的。据说win7里有这样的单播ARP请求报文,即ARP的新特性把,也不知道我程序运行后不能上网是不是这个引起的。

另外,你说的这个:  同时如果不这么做,我这边的测试发现,目标机器收到网关直接发给他的响应包后,会重新更新arp信息,导致欺骗目的主机会失效;
我这里也是这样的,所以我开了个线程不停的给它发ARP欺骗包。

高手求指教
雪    币: 107
活跃值: (73)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
nopnopnop 1 2012-8-16 16:00
13
0
1、我的程序虽然是双向的,但是没有欺骗网关,至于为什么目的主机的响应会发到我的机器,是因为目的主机请求包的源地址被我更改为自己的地址了;

2、我不清楚win7中你所说的arp新特性,但是从逻辑上讲,我感觉这种特性是不可能存在的;同时我在我这边的win7中测试了下,再次确认arp是可用的,没有见到你所发现的奇怪的arp包;你可以尝试采用我源码NetProtocol.h文件内封装的DoCheatingByArp函数发送arp欺骗包试试;
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
javvy 2012-8-16 16:09
14
0
第1点,我想清楚了,确实只需要改下源IP就行了,可以一直想着要欺骗网关。我自己做过IP,TCP校验和,能算对,UDP怎么也算不对,但是好像包UDP校验和全置0也可以发出去。我也改成这样试试。

第2点,http://tansuozhe.blog.51cto.com/309163/650238  我说的就是这个,具体不清楚。
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
nkrush 2012-8-16 16:42
15
0
fatal error C1083: 无法打开包括文件:“pcap.h”: No such file or directory
vs2010,wincap已装。
下载了WpdPak却不知道装到哪儿。
雪    币: 107
活跃值: (73)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
nopnopnop 1 2012-8-16 18:34
16
0
1、TCP跟UDP校验和的计算方式是一样的,伪头+包(清空校验和),假如这二者相加的字节数不是偶数的话,还需要填充一个字节的数据(全0);

2、我看了下你贴的网址资料,没感觉出你发现的那个奇怪的包跟这个新特性有关联,当然我也不是很了解,你可以请教下坛里的高手,如有结论,也请分享下,呵呵;
雪    币: 107
活跃值: (73)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
nopnopnop 1 2012-8-16 18:40
17
0
这我也爱莫能助了,不过你可以尝试搜索下,找到了之后把其内头文件目录以及lib目录分别添加到Tool->Options->Projects and Solutions->VC++ Directories目录中,这样应该编译就能通过了;
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
javvy 2012-8-17 09:34
18
0
LZ,我改成双向的还是不行,我自己的ARP缓存网关对应的mac地址还是被改成了自己的网卡地址。

一样有那个奇怪的包,如下图:

雪    币: 107
活跃值: (73)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
nopnopnop 1 2012-8-18 11:38
19
0
[QUOTE=javvy;1095430]LZ,我改成双向的还是不行,我自己的ARP缓存网关对应的mac地址还是被改成了自己的网卡地址。

一样有那个奇怪的包,如下图:

[/QUOTE]

仅仅从这些信息上来看,我也不知道为什么会发出如此奇怪的包,建议你开个贴,把测试代码贴出来,这样大家也好测试下代码在win7下会不会出现此问题;同时搞不好也有坛友知道是什么情况,直接就回复了;
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
javvy 2012-8-18 23:32
20
0
LZ好热心。问个跟本贴关系不大的问题,谢谢。

在局域网内用winpcap发包,伪造的IP地址,能通过NAT映射成外网地址发出去么。如果伪造的IP是内网地址的话,想想好像可行。如果伪造的是外网地址,感觉发不去。 如果真是这样的话,那些什么SYN攻击、网络刷票器之类的岂不是有很大的局限性?

只是刚学会用winpcap发包,学的网络知识没应用过,想试试。没有不轨企图。
雪    币: 389
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
plgs 2012-9-9 17:16
21
0
楼主不错,呵呵
雪    币: 10
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zkek 2012-9-10 03:21
22
0
这个貌似我了解一部分。

跟论坛里《Windows编程循序渐进》那里介绍的把网卡设置混杂模式不太一样。要先造成ARP欺骗再把网络包截取,转发。好像从原理上说确实要这样。没有拜读源码,妄猜一下
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
沐孜枫 2012-9-10 13:05
23
0
顶下  你   不容易  比我强
雪    币: 389
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
plgs 2012-9-16 16:47
24
0
发帖能得KX?
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
夕阳夕笑 2012-12-4 16:09
25
0
lz,我用vs2008编译的时候出现很多诸如 error C2146: syntax error : missing ')' before identifier '_Elem'的错误,不知该如何设置编译环境,其中的winpcap和WpdPack已安装,望不吝赐教,十分感谢。
游客
登录 | 注册 方可回帖
返回