linux网络嗅探器
来源:互联网 发布:淘宝旗舰店多少钱 编辑:程序博客网 时间:2024/06/05 05:57
这是前段时间学习libpcap写的一个小软件。
正题:
记得当初研究过抓包这一块,不过也好长时间没碰了,忘记了!
于是,google了一份libpcap的的源码研究了下。
#include <pcap.h> #include <time.h> #include <stdlib.h> #include <stdio.h> void getPacket(u_char * arg, const struct pcap_pkthdr * pkthdr, const u_char * packet) { int * id = (int *)arg; printf("id: %d\n", ++(*id)); printf("Packet length: %d\n", pkthdr->len); printf("Number of bytes: %d\n", pkthdr->caplen); printf("Recieved time: %s", ctime((const time_t *)&pkthdr->ts.tv_sec)); int i; for(i=0; i<pkthdr->len; ++i){ printf(" %02x", packet[i]); if( (i + 1) % 16 == 0 ){ printf("\n"); } } printf("\n\n"); } int main() { char errBuf[PCAP_ERRBUF_SIZE], * devStr; devStr = pcap_lookupdev(errBuf); //第一步,选择网卡 if(devStr){ printf("success: device: %s\n", devStr); } else { printf("error: %s\n", errBuf); exit(1); } pcap_t * device = pcap_open_live(devStr, 65535, 1, 0, errBuf);//如果你电脑是多网卡,你不想选默认网卡抓包,可以修改live函数的第一个参数;//当然,这么做。。那前面的第一步就直接省了。。 //打开网络接口,调用网卡,抓取最大数据包头65535,打开网卡混杂模式(0为关,!0为开) //等待时间为0,出错信息存到errbuf中。。if(!device){ printf("error: pcap_open_live(): %s\n", errBuf); exit(1); } struct bpf_program filter; //构建过滤包,compile函数的第二个参数pcap_compile(device, &filter, "dst port 80", 1, 0); //设置过滤包规则,第三个参数表示,只抓80端口的包pcap_setfilter(device, &filter); //使用过滤 int id = 0; pcap_loop(device, -1, getPacket, (u_char*)&id); //获取数据包,使用回调函数指针getPacket pcap_close(device); return 0; }
===========================================================
介绍下自己写的程序:
主要实现的功能是使用者能定制抓包规则,以及查看解析后的各个头部的信息。
协议解析这块,主要看/usr/include/下的头文件来写。
遇到一些原理问题,我也问了参加惠普网络培训时候的CCIE讲师了。
估计还是会有点小毛病!
源码大概1200行左右,太麻烦了,就不放出来了。。上些图片吧!
有图有真相:
- linux网络嗅探器
- 网络 linux网络配置
- 网络&LINUX
- Linux网络
- Linux 网络
- Linux 网络
- Linux网络
- linux网络
- linux 网络
- linux网络
- Linux网络
- Linux 网络
- linux 网络
- Linux网络
- Linux网络
- Linux网络
- linux 网络
- [Linux] Linux网络编程
- 斯坦福大学机器学习课程讲义
- java中的定时器以及schedule和scheduleAtFixedRate方法的探究
- 技术人员如何创业
- c语言内存占用区域,以及详解
- FreeMarker与SpringMVC整合
- linux网络嗅探器
- 鼠标点击物体使其消失
- android支付宝接入(一)
- PHP漏洞全解(五)-SQL注入攻击
- win7_oracle11g_64位连接32位PLSQL_Develop
- javascript符号的各种意义
- 堆栈的深度理解
- how to design a 2D game map?
- IOS 世界标准时间UTC /GMT 转为当前系统时区对应的时间