抓取以太帧报文程序分析
2016-04-03 15:23
309 查看
抓取以太帧程序分析
程序框架
rawSocket()//创建原始套接字;int setPromisc(char *interface,int *sock)//设置interface的混乱模式
分析数据
程序细节
创建socket从数据链路层
sock = socket(PF_PACKET,SOCK_RAW,htons(ETH_P_ALL));
IP层抓取
sock = socket(PF_INET,SOCK_RAW,IPPROTO_TCP);
设置网卡的工作模式
1. 配置 ifr结构体,即Interface request structure。其中包括了 ifr.ifr_name 及ifr.ifr_flag;
2. 使用ioctl控制网卡
extern int ioctl (int __fd, unsigned long int __request, ...);
数据分析
这些都有相对应的结构体,只要移动相对应的指针,这些结构体分别定义在”net/ethernet.h”,”netinet/ip.h”,
“netinet/tcp.h”和”netinet/udp.h”中。
接收数据
extern ssize_t recvfrom (int __fd, void *__restrict __buf, size_t __n, int __flags, __SOCKADDR_ARG __addr, socklen_t *__restrict __addr_len);
通过socket FD读取N个字节到BUF中 .这个函数在
ether=(struct ether_header*)data;
ip报文
data = data + sizeof(struct ether_header);//指针右移 ip = (struct iphdr*)(data);
tcp/udp
tcp = (struct tcphdr *)data; udp = (struct udphdr *)data;
ps:
data = data + (ip->ihl<<2);在移动data到传输层报头之前有点移动两位不懂,这两位跟大小端有关。
相关文章推荐
- 4. Android Framework - View的工作原理
- 我眼中的语言与教育
- Linux -- head/tail
- java多线程
- 第六周作业 分数类的雏形
- 手把手实现Java权限(1)-Shiro介绍
- 编程题:将一句话里的单词进行倒置
- HDU 5656 CA Loves GCD
- lucene整理4 -- 各种Query
- LINUX内核分析第六周学习总结——进程的描述与创建
- ORA-12504:TNS:监听程序在CONNECT_DATA中未获得SERVICE_NAME
- Filter体现职责链模式
- 设置一个软件只能使用三次
- JDK8 ——lambda表达式
- 链表中环的入口结点
- java web的图片上传问题
- Sublime Text3使用记录
- 子线性布局中使两个控件在同一排显示的方法
- HDU 1097
- 构建之法阅读笔记04