问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

windows下raw socket可以发送和接收tcp报文吗

发布网友 发布时间:2022-06-02 15:16

我来回答

1个回答

热心网友 时间:2023-05-12 17:04

一. 摘要
Raw Socket: 原始套接字
可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP, UDP...

int sockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);

这样我们就创建了一个 Raw Socket

Sniffer: 嗅探器
关于嗅探器的原理我想大多数人可能都知道
1. 把网卡置于混杂模式;
2. 捕获数据包;
3. 分析数据包.

但具体的实现知道的人恐怕就不是那么多了. 好, 现在让我们用 Raw Socket 的做一个自已的 Sniffer.

二. 把网卡置于混杂模式
在正常的情况下,一个网络接口应该只响应两种数据帧:
一种是与自己硬件地址相匹配的数据帧
一种是发向所有机器的广播数据帧
如果要网卡接收所有通过它的数据, 而不管是不是发给它的, 那么必须把网卡置于混杂模式. 也就是说让它的思维混乱, 不按正常的方式工作. 用 Raw Socket 实现代码如下:

setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag); //设置 IP 头操作选项
bind(sockRaw, (PSOCKADDR)&addrLocal, sizeof(addrLocal); //把 sockRaw 绑定到本地网卡上
ioctlsocket(sockRaw, SIO_RCVALL, &dwValue); //让 sockRaw 接受所有的数据

flag 标志是用来设置 IP 头操作的, 也就是说要亲自处理 IP 头: bool flag = ture;
addrLocal 为本地地址: SOCKADDR_IN addrLocal;
dwValue 为输入输出参数, 为 1 时执行, 0 时取消: DWORD dwValue = 1;
没想到这么简单吧?

三. 捕获数据包
你的 sockRaw 现在已经在工作了, 可以在局域网内其它的电脑上用 Sniffer 检测工具检测一下, 看你的网卡是否处于混杂模式(比如 DigitalBrain 的 ARPKiller).
不能让他白白的浪费资源啊, 抓包!

recv(sockRaw, RecvBuf, BUFFER_SIZE, 0); //接受任意数据包

#define BUFFER_SIZE 65535
char RecvBuf[BUFFER_SIZE];
越来越发现 Sniffer 原来如此的简单了, 这么一个函数就已经完成抓取数据包的任务了.

四. 分析数据包
这回抓来的包和平常用 Socket 接受的包可就不是一回事儿了, 里面包含 IP, TCP 等原始信息. 要分析它首先得知道这些结构.
数据包的总体结构:
----------------------------------------------
| ip header | tcp header(or x header) | data |
----------------------------------------------

IP header structure:
4 8 16 32 bit
|--------|--------|----------------|--------------------------------|
| Ver | IHL |Type of service | Total length |
|--------|--------|----------------|--------------------------------|
| Identification | Flags | Fragment offset |
|--------|--------|----------------|--------------------------------|
| Time to live | Protocol | Header checksum |
|--------|--------|----------------|--------------------------------|
| Source address |
|--------|--------|----------------|--------------------------------|
| Destination address |
|--------|--------|----------------|--------------------------------|
| Option + Padding |
|--------|--------|----------------|--------------------------------|
| Data |
|--------|--------|----------------|--------------------------------|

TCP header structure:
16 32 bit
|--------------------------------|--------------------------------|
| Source port | Destination port |
|--------------------------------|--------------------------------|
| Sequence number |
|--------------------------------|--------------------------------|
| Acknowledgement number |
|--------------------------------|--------------------------------|
| Offset | Resrvd |U|A|P|R|S|F| Window |
|--------------------------------|--------------------------------|
| Checksum | Urgent pointer |
|--------------------------------|--------------------------------|
| Option + Padding |
|--------------------------------|--------------------------------|
| Data |
|--------------------------------|--------------------------------|

五. 实现 Sniffer
OK!
现在都清楚了, 还等什么.
下面是我用 BCB6 写的一个 Simple Sniffer 的代码, 仅供参考.
(需要在工程文件里加入WS2_32.LIB这个文件)
//
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
阳光燕山学校是贵族学校吗 小米14ultra跌至新低 小米14ultra值得购买吗 马卡龙多少钱一个 马卡龙为什么那么贵 正宗马卡龙多少钱一个-马卡龙为什么这么贵 今年河北的迁西板栗多少钱一斤、生的 板栗什么时候上市能卖到几月呢? 6月份能买到新鲜板栗吗? 睡眠银行的生物信息专家林晨瀚讲座谁有听过,对他们的生物信息助眠方法讲 ... 材料力学实验简介 不知道在一品标局注册一个涉外商标注册的必要性和好处是什么? 学计算机网络专业的以后出来得有几个证才可以顺利找着工作,关于计算机方面的越多越好,我 为什么要注册美国商标 国家有什么关于计算机方面的机构? ccnp是不是比na难很多啊?有没有正在学习的,交流一下! 罗云彬<windows环境下32位汇编语言程序设计>中的那个TCP/IP网络聊天室,如何才能使之利用因特网进行连接? 办公室办公桌后面是窗户上面有大梁厅侧面也有个小窗这样好吗怎么破解急急请高人指点 办公桌背后是窗户好吗 你好,我办公室的办公桌背后是窗户,向正北,开门向南,如图,我坐最后靠窗位置,要怎么化解好?谢谢! windows网络编程p2p与tcp/ip有何关系 二战各国运兵列车运载量 编写TCP协议,用windows socket编程可以吗? 贵州省云上结构食用菌开发有限公司怎么样? 贵州云上医疗科技管理有限公司怎么样? 贵州云上九天旅游文化产业发展有限公司怎么样? 贵州云上九都科技有限公司怎么样? 华为nova2手机短信铃音时间短让它响的时间长点,怎么调试 荔枝可以做什么? 《王者荣耀》中的貂蝉与张良,相比之下哪个更厉害? 王者荣耀的貂蝉kpl什么时候返厂啊? 海外商标为什么那么多公司都想注册 好,,组词 好字的好字怎么组词 205/50-10轮胎和205/50-16的轮胎有什么区别? 米其林205-16汽车轮胎多少价格 205/60/16的轮胎换205/55/16的可以吗?205-60-16轮胎换完205-55-16灯亮了会有什么影响吗? 周爽的《感谢 》 歌词 寻思 较量 推辞 款待 这几个字的近义词是什么? 推辞的近义词!求!急!! 谁知道"推辞"的近义词是什么? 信封小了放不下信怎么办 寓言的反义词和近义词 理由的近义词 取悦近义词 work与works一样吗? 我想要一些关于蒙古服饰走秀的音乐?急需~!!最好是那种古典的或者和现代结合的也行不要流行歌曲啊~! work和works有什么区别?本人对英文真的是一窍不同.希望大家可以多帮帮忙. 蒙古族服装表演背景音乐,以前用过,不知道歌名,求歌名 在photoshop中做信封小方格怎么不能复制多次 英语单词work和works有什么区别