Unix环境下C实现网络抓包

拾起去年扔下的UNIX高级环境编程看了下网络编程章节,对着写了点,废话少说. #include <stdio.h> #include <sys/socket.h> #include <netinet/in.h> #include <arpa/inet.h> #include <netinet/ether.h> #define iip2cip(…) inet_ntoa((struct in_addr){__VA_ARGS__}) #define BUFFER_MAX_SZ 2048 typedef struct mac_frm_hdr { //按照以太网帧格式定义,长度必须一致 unsigned char dest_addr[6]; unsigned char src_addr[6]; unsigned short type; }__attribute__((packed)) MAC_FRM_HDR;//取消编译器自动优化对齐结构体,保证与帧中的结构一致. typedef … “Unix环境下C实现网络抓包”

Read More

网络协议粗略复习记录

[TOC] 重新看了点《TCP/IP详解》,粗略的把知识归纳下. 关于分层 网络分层让我很糊涂,有四层协议,五层协议,还有七层协议的. 总所周知,网络协议通常分不同层次进行开发,每一层分别负责不同的通信功能。一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。 TCP/IP通常被认为是一个四层协议系统,当然也有人将其分为五层协议的,貌似这么分好像也合理,因为物理设备也确实不能少,还有理论上的OSI七层模型: 越下面的层,越靠近硬件;越上面的层,越靠近用户. 至于每一层叫什么名字,其实并不重要,每一层都是为了完成一种功能. 为了实现这些功能,就需要大家都遵守共同的规则,而大家都遵守的规则,就叫做协议(protocol). 关于协议 网络的每一层,都定义了很多协议.而TCP/IP协议是一个统称,它是一个大家族,不仅仅只有TCP协议和IP协议,它还包括其它的协议,如: 物理层 常见介质有铜绞线、光缆、无线介质(电磁波、微波、红外线) 物理层主要负责基本的信息传输以及传输控制工作。 人们可以使用电线来进行传输,也可以使用光纤来进行传输,甚至可以是无线电磁波. 对于不同的介质,产生的信号也是不同的,物理层就是要规定介质和信号的规范. 常见接口规范: RS-232(串口)、FDDI、IEEE802.3z、IEEE802.3ae、IEEE802.11 链路层 使用物理连接后的设备,通过高低频的电子信号传输信息,然后接收端的设备通过特定的算法识别这些信号.早期的时候,每家公司都有自己的电信号分组方式,十分混乱,由此成立了 IEEE 802委员会 来制定数据由物理层到链路层相关的一系列标准.再之后,IEEE802系列标准中叫做 802.3 “以太网”(Ethernet)RFC 894的协议,逐渐地占据了主导地位. 以太网协议规定: 1. 一组电信号构成一个数据包,叫做”帧”(Frame).每一帧分成两个部分: 标头(Head),数据(Data),尾部校验(CRC). 2. “标头”包含数据包的一些说明项,包括目的地址(6字节),源地址(6字节),类型(2字节).其总长度固定为 14 字节,. 3. … “网络协议粗略复习记录”

Read More