能力缺口:你只会调系统接口,还是能自己造包抓包
很多写过普通网络编程的人,脑子里只有 TCP 和 UDP 两种套接字。一旦遇到要自己组装以太网帧、主动发送 ARP 请求或者做底层报文分析,就立刻抓瞎。这门课解决的就是这个断层:带你从传输层接口往下走一层,直接操作链路层和网络层的原始数据。如果你以前只会调 connect 和 send,对 MAC 地址、ARP 协议、网卡混杂模式这些底层机制只停留在背概念的阶段,这就是你需要补的课。它适合有 Linux C 基础和基本网络概念的开发者,如果你连结构体指针和字节序都没搞明白,建议先补基础再看。
建议先看的几块与练习配合方式
资料包里的内容逻辑非常连贯,建议按顺序推进,不要跳着看。第一块是原始套接字简介和数据包构成详解,这是地基,必须先弄清以太网帧头、IP 头、ARP 报文是怎么拼接的。第二块重点看网卡混杂模式和 ioctl 的使用,这是控制网卡底层行为的关键。很多人不知道怎么让网卡接收不属于本机的 MAC 包,这块手把手讲了怎么用 ioctl 设置混杂模式,并且演示了具体的参数传递距离。第三块是 ARP 客户端编写和 ARP 欺骗原理,这是把前面理论转化为实战的核心。练习时,不要只对着视频抄代码。建议你准备两台虚拟机或者一台带双网卡的 Linux 主机,先跟着写出 MAC 底子分析器,抓到真实的以太网帧。然后自己动手写 ARP 客户端,主动向局域网发请求并解析回应。最后在隔离的局域网环境里尝试实现 ARP 欺骗,观察目标主机的网络中断过程。
学完能独立做什么与自测问题
看完这套资料,你应该能脱离视频独立完成几件事:能用 C 代码创建原始套接字并设置网卡混杂模式;能手动构造包含以太网头和 ARP 头的完整数据包并发送到网络;能写一个抓取并解析链路层帧的工具。为了检验自己是否真的掌握,看完后尝试回答几个问题:原始套接字和普通 TCP 套接字在接收数据时,拿到的数据包头有什么区别?ioctl 在设置混杂模式时,具体操作的是网络设备的哪个结构体成员?构造 ARP 请求包时,以太网帧头里的目的 MAC 为什么要填特定的广播地址?ARP 欺骗的核心原理是向目标主机发送什么字段被篡改的报文?如果这些你都能说清楚,说明底层网络包的构造和解析你已经真正吃透了。
课程目录
1-1 [原始套接字快速入门] 原始套接字简介 (10:38) 1-2 [原始套接字快速入门] 各种数据包构成详解 (22:21) 1-3 [原始套接字快速入门] 实战:手把手写mac底子分析器 (20:55) 1-4 [原始套接字快速入门] 启动网卡混杂模式 (17:43) 1-5 [原始套接字快速入门] ioctl的使用 (45:15) 1-6 [原始套接字快速入门] ioctl使用距离 (48) 1-7 [原始套接字快速入门] arp协议 (07:25) 1-8 [原始套接字快速入门] 案例:手把手写arp客户端 (33:31) 1-9 [原始套接字快速入门] 案例:手把手写arp客户端2 (13:05) 1-10 [原始套接字快速入门] arp欺骗原理与实现方法 (09:07)





