开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 88947|回复: 419
收起左侧

[易语言软件开源] 使用 RawSocket 捕获网卡/指定程序/指定端口/指定IP 数据包

  [复制链接]
结帖率:95% (59/62)
发表于 2015-8-31 00:54:42 | 显示全部楼层 |阅读模式   福建省泉州市
分享源码
界面截图:
是否带模块: 调用了模块
备注说明: -
本帖最后由 幻云 于 2015-8-31 21:42 编辑

源码在最下面,推荐看完本文章。

本文章将介绍如何使用RawSocket(原始套接字)开发网络嗅探器:

首先我们得了解什么是套接字,这个我就不多说,自己百度,百度百科比我说的好。
那么什么又是原始套接字呢,常用的套接字分为 SOCK_STREAM(流套接字) 用于TCPXY通讯。 SOCK_DGRAM(数据报套接字) 同于UDPXY通讯。
那么原始呢,他则是和名字一样原始套接字;举例:要想用流套接字进行一次TCP的发包,那么直接连接上对方服务器然后用Send就可以发送指定的内容,但其实发送的数据并不止你的那些内容,有一些东西是流套接字会给你自动补上的。TCP是属于IPXY的一个子XY,那么要发送一个TCP数据包就得加上(以太网XY报头这个先不提),IPXY的报头,和TCPXY报头,这些东西流套接字都会帮你处理,而原始套接字则不会(当然也可以设置让原始套接字构造IP报头)。原始套接字他有更多的用途,但相对来说也比流套接字或数据报套接字麻烦。 原始套接字还可以设置成允许接收本地所有的套接字数据。那么我们就利用这个功能来做嗅探器!


首先:1.使用  WSAStartup (合并短整数 (2, 2), WSADATA)  来初始化Winsocket服务 其参数有2个  第一个 (短整数型/双字节型):wVersionRequired  这个参数表明使用的winsock版本号,高位指定修订版本号,低位指定主版本号。第二个参数 WSADATA类型 用于接收Winsocket细节东西,咱不用管它。

//下面就不说那么详细了,源码里面全是注释,自己看。

2.然后使用socket (#AF_INET, #SOCK_RAW, #IPPROTO_IP)  来创建一个套接字   第一个参数应该是表明Internet地址格式反正只能固定这个,仅仅支持这个  参数2:表明要创建的是一个原始套接字,参数3:指定IPXY  IPXY包括其子XY TCP UDP 等。成功返回套接字句柄
3.  bind (s, addr, sizeof (addr))  将套接字绑定至指定网卡,参数1=套接字句柄    参数2为一个addr结构的值,该值表明要绑定的网卡IP及端口号
4.  ioctlsocket (Socket, 2550136833, 1) 将套接字的模式改变为允许接收所有数据
顺利完成上面的操作后咱就可以用Recv来接收数据包了,只要不断的调用Recv就OK。

但Recv接收到的数据并非是直观的,我们还需要进行下一步的解析,下面将介绍如何解析报文:

下面注意:一个字节等于8个二进制位

首先,我们得到的数据包是IPXY的 IP报头一般都是20个字节也可能更多,因为有个可选项,但一般都是20字节。首先,前面一个字节的高4位表明版本号,低4位表明IP报文头部的长度(注意:将该4位二进制值偏移4位才能得到真正的报头长度),TTL 表明该报文的生存时间。 其他我也就不一一的诉说了,自己看图片。应该能看懂。我们只需要取出是什么XY和最后面的数据就OK。
1.IP报文结构图片:来源自网络
20120918014956486.gif

然后,我们已经成功的从IP报文中取得了XY类型 或是UDP 或是TCP 又或是 ICMP等,但完了么,没有,我们还需要从取出的报文中得到更多的信息。下面介绍TCP报文

TCP报文的报头长度也和IP报文的报头长度差不多,一般都是20个字节或许更多。TCP报文 前16位表明源端口号,即是发送数据包者的端口号,再后面16位表明目标的端口号。 然后是 32位序列号 和32位的确认号TCP是一种可靠通讯XY,它需要3次握手来进行连接。而这两个编号将会起到大作用。后面就是报文头部的长度,同样是 4位 也需要偏移4位。后面的就不说了,有兴趣的自己百度。

2.TCP报文XY结构图片,来源自网络
99768925tb7a55ad33adb&690.bmp


UDP报文结构就比较简单了,没有TCP那么复杂,但它却没有TCP可靠,也各有各的有点。

3.UDP报文结构图片 来源自网络
18850667_5.jpg   报头为 8个字节


那么到现在,我们已经捕获并解析了数据包,那么如何进行过滤呢。

端口过滤/IP过滤我这就不说了,可以从解析出来的东西判断。那么怎样进行指定程序捕获呢。
这里我源码里面用的是一个很简单的方法,也很笨拙,但至少可以用。就是枚举系统的端口占用表,然后得到一个封包后判断端口是否被XY捕获数据包的程序占用如果是就通过,否则丢弃。此方法抓包速度可能有稍微的影响,但绝对不大,最多慢个100毫秒,我这里测试的没啥吊问题。此方法只能捕获程序的TCP和UDP数据包。

最后 HTTP数据包
HTTPXY属于TCP下面的一个子XY。所以可以捕获到。但有些HTTP包太大,TCPXY无法一次传送完成,或者是返回的数据包,这些都没有组合在一起,没有组成像httpwatch那样的显示。只能一段一段的看,这让人苦恼。当然,这也是可以解决的。HTTP每一次发包都会进行TCP连接接收到之后呢就好关闭连接,那么上面说过,TCP是个可靠的通讯XY,他的报文头部所包含了 该包的 ACK(确认号)和 SEQ(包序号),那么我们就可以通过一系列的判断,首先可以在TCP包中寻找是否有HTTPXY相关的字符(比如 “POST”,“GET”,“HTTP 1.1”)等等,来判断是不是一个http包,然后通过ACK和SEQ经过一些判断来组合这些数据包,这个源码中无例程,可自行研究。

关于HTTPS:https是加密一种的XY,数据包发送与接收的全程将会被加密。本源码也无法对https进行解密。


Y}C{GR0DDB{D@}GGY_0[T.jpg


注意:原始套接字必须以管理员权限才能成功创建!若要易语言调试,则把易语言用管理员权限运行即可!
分享不止是分享,它更是一次超越!

具体请看源码中的注释。
纯手打原创,转载请声明。如有问题,望回帖指出。(文章加源码从下午写到现在,单写文章就2个多小时。)
@萧阳天  枚举UDP及TCP端口占用情况来自萧阳天的模块,感谢!
RawSocketSniffer.rar (66.41 KB, 下载次数: 2502)

点评

软件容易停止运行,有解决方案吗??   广东省深圳市  发表于 2015-9-23 10:37
wkf
拆楼   海南省澄迈县  发表于 2015-9-5 15:30
0   福建省厦门市  发表于 2015-9-4 08:23
下面的别看了   福建省厦门市  发表于 2015-9-4 08:23
注意:若编译时提示发现死循环代码, 请在设置易语言中去除检查死循环代码选项   福建省泉州市  发表于 2015-8-31 13:26
@萧阳天 枚举UDP及TCP端口占用情况来自萧阳天的模块,感谢!   福建省泉州市  发表于 2015-8-31 01:17
注意,可能会有些路由器无法抓取回来的数据包,这个只是有些,目前我用的水星路由器就会出现,然而我就直插网线   福建省泉州市  发表于 2015-8-31 01:06

评分

参与人数 21好评 +15 精币 +43 收起 理由
bianyuan456 + 1 + 2 感谢分享,很给力!~
game88288 + 1 Win7 64位,运行后就会停止工作.啥情况
哔哔芭比波比i + 1 + 2 支持开源~!感谢分享
大骗子 + 1 奉上小小红包希望笑纳
三咲智子 + 1 + 2 听起来好高大上,不过不懂!
heiyi + 1 + 5 内容写了2个小时,楼主真是辛苦了
狸楚殇 + 2 感谢分享,很给力!~
名无所谓 + 1 + 2 感谢分享,很给力!~
renchin10025 + 1 + 1 感谢发布原创作品,精易因你更精彩!
Meself + 1 虽然看不懂您在讲什么。但是看来还是不错的。
DreamF + 1 + 1 发现一处编译死循环。怎么解决啊? 小白看了半天没看出端倪,
我們還太嫩 + 1 调试编译失败 错误(10064): 发现死循环代码。
薆要执著 + 1 同志你想多了原始套接字在2003版本的系统意思便不能发送自己封的TCP协yi和U
小凡じ亦匿名 + 1 + 2 奉上小小红包希望笑纳
精易客服 + 1 + 5 感谢发布原创作品,精易因你更精彩!
伸伸党 + 1 感谢你的支持,精易有你更精彩
LXP + 1 感谢发布原创作品,精易因你更精彩!
applek + 1 + 2 很不错的拦截工具,棒
十万个为什么 + 1 + 2 支持开源~!感谢分享
Seven3in + 1 + 5 支持开源~!感谢分享
半夏时光 + 1 + 5 奉上小小红包希望笑纳

查看全部评分


本帖被以下淘专辑推荐:

结帖率:92% (12/13)
发表于 2015-8-31 14:41:23 | 显示全部楼层   四川省乐山市
发现死循环 错误 检测半天 没看出什么端倪。。。。求解决~
QQ截图20150831144028.png

点评

在系统设置的 “编译” 那个设置页   福建省泉州市  发表于 2015-8-31 14:51
不要改动任何代码 依次打开 易语言》工具》系统设置》去除勾选“编译时检测死循环代码”   福建省泉州市  发表于 2015-8-31 14:50
回复 支持 反对

使用道具 举报

结帖率:100% (16/16)

签到天数: 10 天

发表于 2024-9-24 14:48:36 | 显示全部楼层   江苏省苏州市
好东西学一下
回复 支持 反对

使用道具 举报

结帖率:91% (10/11)
发表于 2024-8-25 04:39:13 | 显示全部楼层   湖北省鄂州市
运行提示死循环。。。
回复 支持 反对

使用道具 举报

发表于 2024-6-13 21:26:47 | 显示全部楼层   江苏省南京市
下载来学习一下,谢谢
回复 支持 反对

使用道具 举报

发表于 2024-6-1 06:38:17 | 显示全部楼层   广东省惠州市

新技能已get√
回复 支持 反对

使用道具 举报

结帖率:90% (27/30)

签到天数: 19 天

发表于 2024-2-23 17:19:34 | 显示全部楼层   山东省济宁市
多谢分享
回复 支持 反对

使用道具 举报

签到天数: 11 天

发表于 2023-12-9 17:38:49 | 显示全部楼层   福建省泉州市
感谢分享
回复 支持 反对

使用道具 举报

发表于 2023-7-27 23:28:42 | 显示全部楼层   浙江省温州市
可以拦截修改吗
回复 支持 反对

使用道具 举报

发表于 2023-7-27 23:28:20 | 显示全部楼层   浙江省温州市
试试好不好用
回复 支持 反对

使用道具 举报

发表于 2023-7-27 23:26:36 | 显示全部楼层   浙江省温州市
试试好不好用
回复 支持 反对

使用道具 举报

发表于 2023-7-27 23:26:13 | 显示全部楼层   浙江省温州市
试试好不好用
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:wp@125.la
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表