UNIX网络编程:网络数据包检测

网络数据包检测

数据包捕获(sniffer):是指在网络上进行数据收集的行为,需要通过网卡来完成。

三种访问方式:

BSD Packet Filter(BPF)

SVR4 Datalink Provider Interface(DLPI)

linux SOCK_PACKET interface

libpcap库

安装:

apt-get install libpcap-dev

常用API

捕获数据包

查找缺省的用来捕获数据网络设备

char * pcap_lookupdev ( char * errbuf )//出错时保存系统返回的错误信息。

返回值:

成功时返回指向设备名称的指针,

失败返回NULL

查找指定设备的网络号和子网掩码

int pcap_lookupnet( const char * device,//指向设备名称的指针

bpf_u_int32 * netp,//指向获取的网络号的指针

bpf_u_int32 * maskp,//指向获取的子网掩码的指针

char * errbuf)//出错时保存系统返回的错误信息

返回值:

成功返回0,

失败返回-1,并保存错误信息到errbuf中。

打开一个网络设备用于捕获数据包

pcap_t * pcap_open_live( const char * device,//指向设备名称的指针

int snaplen, //捕获的数据包的长度

int promisc,//网络接口工作模式

int to_ms,//读取数据包时的超时

char * errbuf)//出错时保存系统错误信息

返回值:

成功返回捕获数据包的句柄

失败返回NULL并保存错误信息到errbuf中

捕获下一帧数据

const u_char * pcap_next ( pcap_t * p//pcap_open_live返回的句柄

struct pcap_pkthdr * h)保存捕获的数据包属性的结构体指针

返回值:

成功时返回捕获的数据帧的指针,

失败或无数据返回NULL。

循环捕获多帧数据并处理

typedef void ( * pcap_handler )( u_char *user,

const struct pcap_pkthdr * h,const u_char *bytes);

int pcap_loop( pcap_t * p,//pcap_open_live返回的句柄

int cnt,//要捕获的数据帧的个数

pcap_handler callback,//捕获到一帧数据时执行的处理函数

u_char * user )//传递给callback的参数

查看本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/OS/unix/

时间: 2024-09-19 10:12:44

UNIX网络编程:网络数据包检测的相关文章

iOS网络编程之六——数据缓存类NSURLCache使用解析

iOS网络编程之六--数据缓存类NSURLCache使用解析 一.引言         在前面博客中,介绍了NSURLRequest请求类的相关使用方法,其中有介绍关于请求返回数据的缓存策略,实际上,iOS中具体缓存操作的管理是由NSURLCache类来实现的.NSURLRequest类介绍的博客地址如下: iOS中NSURLRequest相关使用:http://my.oschina.net/u/2340880/blog/620225. 二.NSURLCache中方法与属性 ? 1 2 3 4

深度数据包检测DPI开发解析

深度数据包检测(Deep packet inspection,缩写为 DPI)是一种特殊的网络技术,一般网络设备只会查看以太网头部.IP头部而不会分析TCP/UDP里面的内容这种被称为浅数据包检测;与之对应的DPI会检查TCP/UDP里面的内容,所以称为深度数据包检测. DPI一般是一个硬件或者软件,一般用"旁挂"的方式接入到网络.它会对网络中的每个数据包进行检查,识别出应用层协议,根据识别的协议采取一定的措施(比如记录HTTP访问行为).对于TCP协议它可以识别完整的TCP交互过程(

求教怎么编程构造数据包并发送?

问题描述 求教怎么编程构造数据包并发送? 使用c++,或者c#,怎样构造诸如arp reply的包(其中的字段可自己控制又什么数据填充),icmp包,之类的,希望能给出相关博客等各种形式的资料,教程的链接,推荐有什么好的书也可以. 另外用python实现的也可以 解决方案 参考原始套接字来构造数据包 解决方案二: 参考:http://download.csdn.net/detail/daichangjian/3656531

c语言 网络编程-网络编程 connect连接问题

问题描述 网络编程 connect连接问题 clientaddr.sin_family=AF_INET; //客户端向服务端请求的端口号,应该和服务端绑定的是一致的 clientaddr.sin_port=htons(4600); clientaddr.sin_addr.S_un.S_addr=inet_addr(cServerIP); iCnnRes=connect(m_SockClient(struct sockaddr*)&clientaddrsizeof(struct sockaddr)

如何抓取网络中的数据包并转发

问题描述 我现在想将网络上所有的报文全部发到某台计算机上,这个用libpcap来抓,然后自己写算法,根据算法用libnet把抓来的包分别发到不同的目的计算机上去至于算法我现在是想用协议,但是我用协议将数据分开后怎么libnet来发呢?是要先存还是有别的更直接的办法?我记得是有一个转换的,libnet有一个函数可以读取libpcap截下来的包,但那个函数我忘记了,而且现在也查不到不知道哪位同志有好的方法,可以介绍下吗?最好是能提供开源代码的.谢谢了

TCP网络编程封包解包问题

问题描述 用socket+TCP协议编程存在读取数据100字节但是,数据不足100字节的问题,转换数据总是有问题,看了一些书籍,都说发送前封包,接收的时候解包为对象,但是没有例子不是很直观,到底在发送前怎么封装,接收时怎么解封,如果我读取100条数据,前50是我要的,后50是下一条的,那么又要怎么处理呢?请各位指教,谢谢,最好有实例 解决方案 解决方案二:你可以首先发送整条数据的长度,当接收到指定长度之后就可以算下一条了解决方案三:c#传送的是byte[],先把这个数组的长度传过去,然后等响应后

使用无线网络数据包对无线网络安全进行分析

本文阐述的是利用无线网络数据包来对无线网络安全的正确分析,在无线网络中,建立连接并不像连接有线网络那样简单,物理安全也没有阻止未经授权人员进入设备室那样容易,甚至在接入点总方向的小问题都可能让你崩溃.也就是说,保护无线网络安全将成为未来安全行业的挑战.在这篇文章中,我们将探讨解决利用数据包分析无线安全问题的实用技巧,首先我们将展示正确连接无线网络数据包的方法,收集到正确数据后,我们将探讨不同的分析技术,包括分析WEP/WPA认证.过滤加密流量以及寻找恶意接入点等.捕获无线数据包从数据包 来看,无

Linux网络编程入门

(一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端          网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端. 客户端         在网络程序中,如果一个程序主动和外面的程序通信,那么我们把这个程序称为客户端程序. 比如我们使用ftp程序从另外一         个地方获取文件的时候,是我们的ftp程序主动同外面进行通信(获取文件), 所以这个地方我们的ftp程序就是客户端程序.  服务端        

java 网络编程 UDP TCP

网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信.... 网页编程: 就是要基于html页面的基础上进行数据的交互的. 比如: 珍爱网. oa(办公自动化). 高考的报告系统... 计算机网络: 分布在不同地域 的计算机通过外部设备链接起来达到了消息互通.资源共享的效果就称作为一个计算机网络. 网络通讯的三要素:     1. IP     2. 端口号.