精华内容
下载资源
问答
  • 中间层数据包过滤可以辅助实现个人防火墙及通信内容监控的功能。
  • Ubuntu16.04下安装了Wireshark的话,应该是已经安装了libpcap0.8的包,如下图:使用sudo apt-get install libpcap-dev安装开发包,安装后系统显示如下图:多了libpcap0.8-devlibpcap-dev两个包。工作可能截取的...

    Ubuntu16.04下安装了Wireshark的话,应该是已经安装了libpcap0.8的包,如下图:


    使用sudo apt-get install libpcap-dev安装开发包,安装后系统显示如下图:


    多了libpcap0.8-dev和libpcap-dev两个包。



    工作可能截取的数据包文件(pcap文件)含有一些重要的数据包,这时我们需要把他们提取出来保存到新的数据包文件(pcap文件)中。比如下面图片中只需要dns协议的数据包


    直接贴代码了,如果api不知道怎么用的,直接使用man就行了;注意过滤表达式使用“udp port 53”,不要使用“dns”编译过滤表达式的时候会出错,提示语法错误。

    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    #include <pcap/pcap.h>
    
    pcap_t *source_pcap_t=NULL;
    pcap_dumper_t *des_pcap_dumper_t=NULL;
    
    int exit_main()
    {
    	printf("exit_main() is called.\n");
    	if( NULL!=source_pcap_t )
    	{
    		pcap_close(source_pcap_t);
    	}
    	if( NULL!=des_pcap_dumper_t )
    	{
    		pcap_dump_close(des_pcap_dumper_t);
    	}
    	exit(0);
    }
    
    
    int main(int argc, char *argv[])
    {
    
    	//打开要处理pcap文件
    	char errbuf[PCAP_ERRBUF_SIZE]={0};
    	if( NULL==(source_pcap_t=pcap_open_offline(argv[1], errbuf)) )
    	{
    		printf("pcap_open_offline() return NULL.\nerrbuf:%s\n", errbuf);
    		exit_main();
    	}
    	//打开保存的pcap文件	
    	if( NULL==(des_pcap_dumper_t=pcap_dump_open(source_pcap_t,"./rescult.pcap")) )
    	{
    		printf("pcap_dump_open() fail.\n");
    		exit_main();		
    	}
    
    	//判断链路层类型
    	int datalink_offset=0;
    	//pcap_datalink() returns the link-layer header type for the live capture or ``savefile'' specified by pcap_t
    	int datalink_type=pcap_datalink(source_pcap_t);
    	switch (datalink_type)
    	{
    		case PCAP_ERROR_NOT_ACTIVATED:
    			printf("pcap_datalink() return PCAP_ERROR_NOT_ACTIVATED.\n");
    			exit_main();
    			break;
    		case DLT_NULL:
    			printf("Data Link Type:BSD loopback.\n");
    			datalink_offset=4;
    			break;
    		case DLT_EN10MB:
    			printf("Data Link Type:IEEE 802.3.\n");
    			datalink_offset=14;
    			break;
    		case DLT_PPP:
    			printf("Data Link Type:PPP.\n");
    			datalink_offset=0;
    			break;
    		case DLT_FDDI:
    			printf("Data Link Type:FDDI.\n");
    			datalink_offset=21;
    			break;
    		case DLT_IEEE802_11:
    			printf("Data Link Type:IEEE 802.11.\n");
    			datalink_offset=22;
    			break;
    		case DLT_PPP_ETHER:
    			printf("Data Link Type:PPPoE.\n");
    			datalink_offset=20;
    			break;
    		default :
    			printf("Data Link Type:UnKnown.\n");											
    	}
    	printf("datalink_offset:%d\n", datalink_offset);
    
    	//设置过滤表达式
    	struct bpf_program filter;
    	if( -1==pcap_compile(source_pcap_t, &filter, "udp port 53", 1, 0) )
    	{
    		printf("pcap_compile() fail.\n");
    		printf("errno:%s\n", pcap_geterr(source_pcap_t));
    		exit_main();
    	}
      	if( -1==pcap_setfilter(source_pcap_t, &filter) )
    	{
    		printf("pcap_setfilter() fail.\n");
    		exit_main();
    	}
    
    	//网络层
    	struct pcap_pkthdr packet;
    	const u_char *pktStr;
    	while(1)
    	{
    		pktStr=pcap_next(source_pcap_t, &packet);
    		if( NULL==pktStr )
    		{
    			printf("pcap_next() return NULL.\n");
    			break;		
    		}
    		else
    		{
    			printf("Packet length: %d\n", packet.len);  
    	  		printf("Number of bytes: %d\n", packet.caplen);  
    	 		printf("Recieved time: %s\n", ctime((const time_t *)&packet.ts.tv_sec));
    			//读到的数据包写入生成pcap文件
    			pcap_dump((u_char*)des_pcap_dumper_t, &packet, pktStr);	
    		}
    	}
    	
    	pcap_dump_close(des_pcap_dumper_t);
    	pcap_close(source_pcap_t);
    	return 0;
    }
    

    下面图片是生成的rescult.pcap的结果,把dns的数据包全部取出来了。


    提供一个libpcap的开发文档:http://download.csdn.net/download/singleyellow/10004064



    展开全文
  • 使用iptables进行TCP数据包过滤

    千次阅读 2020-01-17 15:20:18
    在Linux系统内核空间中,有面向网络的防火墙实现。...netfilter是处于内核态的,netfilter是Linux操作系统核心内部的一个数据包处理模块,它具有如下功能: 1. 网络地址转换(Network Address...

    在Linux系统内核空间中,有面向网络的防火墙实现。这个防火墙是由软件实现的,是逻辑上的防火墙。用户可以设置某些的“安全设定”,配置到这个网络防火墙的“安全框架”中。这个“安全框架”就是netfilter。

        netfilter是处于内核态的,netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

        1. 网络地址转换(Network Address Translate)

        2. 数据包内容修改

        3. 以及数据包过滤的防火墙功能。

        刚刚我们提到用户可以在netfilter中自定义“安全设定”,就需要一个中间代理把用户态的“安全设定”配置到内核态中的“安全框架(netfilter)”,这个代理就是iptables。

        iptables可以提供给我们用户一些选项来自定义netfilter的功能。这次我们讨论使用iptables进行TCP数据报过滤。

        在命令行输入sudo iptables -L查看防火墙管理的三个“链”:

    Chain INPUT表示进入路由器的数据报、Chain FORWARD表示经过路由器的数据报、Chain OUTPUT表示从路由器从路由器出去的数据报。这里三者默认都是ACCEPT(接收)。

        target代表如何处理捕获的数据报,共有3种可定义的方法:ACCEPT(接收)、REJECT(拒绝)、DROP(丢弃)。prot代表协议;opt代表选项;source代表源地址;destination代表目的地址;最后一列是描述。


        举个例子,下面是wireshark抓取的正常发送的数据报:

        接下来我们使用iptables在OUTPUT链中DROP掉有PSH标志位的TCP报文

    在Chain OUTPUT中多了一行过滤规则。sudo iptables -A OUTPUT -p tcp --tcp-flags PSH PSH --dport 9000 -j DROP

    -A <Chain name>指定过滤规则的链,这里指定了输出链。

    -p <protocol> [options]指定协议和协议的选项,这里指定了tcp的标志位PSH。

    --dport <port>指定目的端口(destination port)号,这里指定了9000。同时可以使用--sport <port>指定源端口号。

    -j <DROP|REJECT|ACCEPT>指定过滤方法,这里指定了丢弃(DROP)。

    iptables更多的选项和用法可以用命令iptables -h查看。

        接着我们在这个过滤规则下重新抓取刚才的数据报:

        这次发送的数据报的PSH标志都被过滤掉了,接收方应用层对并不知道数据报已经到达,造成了接收方窗口溢出。

        最后,使用iptables --delete删除过滤规则前,需要知道过滤规则的行号。在命令行输入sudo iptables -L --line-numbers查看。

        刚才的过滤规则在OUTPUT链的行号2,现在可以输入sudo iptables --delete OUTPUT 2删除规则。再次查看过滤表。

        已成功删除。

    注:本文为小Yip原创,未经许可不得在任何平台转载。如需转载,与作者联系~

    欢迎加入linux交流群:734638086,分享工作经验。

    关注微信公众号:技术训练营(微信ID:TechBootcamp),获取更多资讯~

    微信扫一扫,发现更精彩。

    展开全文
  • 数据包是TCP/IP协议通信传输中的数据...但是TCP/IP协议是工作在OSI模型第三层(网络层)、第四层(传输层)上的,而帧是工作在第二层(数据链路层)。上一层的内容由下一层的内容来传输,所以在局域网中,包是包含在帧里的
  • 一、网络层IP数据包的结构介绍二、传输层TCP结构图三、传输层UDP结构图四、网络数据包过滤分析介绍 WinPcap或libpca最强大的特点之一就是数据流的过滤引擎。它提供一种高效的方法来只捕获网络数据流的某些数据而且...

     

    一、网络层IP数据包的结构介绍

    图片


    二、传输层TCP结构图

    图片


    三、传输层UDP结构图

    图片

    四、网络数据包过滤分析介绍

      WinPcap或libpca最强大的特点之一就是数据流的过滤引擎。它提供一种高效的方法来只捕获网络数据流的某些数据而且常常和系统的捕获机制相集成。过滤数据的函数是pcap_compile() 和 pcap_setfilter()来实现的。

      pcap_compile()来编译一个过滤设备,它通过一个高层的boolean型变量和字串产生一系列的能够被底层驱动所解释的二进制编码。boolean表示语法能够在这个文件的过滤表示语法中找到。

    pcap_setfilter() 用来联系一个在内核驱动上过滤的过滤器,这时所有网络数据包都将流经过滤器,并拷贝到应用程序中。

      下面的代码展示了如何编译并社定一个过滤设备。注意必须从pcap_if结构中获得掩码,因为一些过滤器的创建需要这个参数。

      下面的代码段中的pcap_compile()的"ip and tcp"参数说明只有IPV4和TCP数据才会被内核保存并被传递到应用程序。

      代码片段:

     


    过滤分析完整代码:

     

      首先设置UDP过滤,用这种方法确保packet_handler()只接受到基于IPV4的UDP数据。同样定义了两个数据结构来描述IP 和UDP的头部信息,packet_handler()用这两个结构来定位头部的各种字段。
    packet_handler()虽然只是限于处理一些UDP数据但却显示了复杂的嗅探器如tcpdump/WinDump的工作原理。
      首先对MAC地址的头部并不感兴趣所以跳过它。不过在开始捕获之前使用pcap_datalink()来检查MAC层,所以以上的程序只能够工作在Ethernet networks上,再次确保MAC头为14bytes。
      MAC头之后是IP头,从中提取出了目的地址。IP之后是UDP,在确定UDP的位置时有点复杂,因为IP的长度以为版本的不同而不同,所以用头长字段来定位UDP,一旦确定了UDP的起始位置,就可以解析出原和目的端口。

     

     

    展开全文
  • Linux下使用tcpdump网络数据包进行截获与分析概述​ tcpdump可以将网络中传送的数据包完全截获下来供我们分析,它支持网络层、协议、主机、网络或端口号的过滤,并提供了and、or、not等逻辑语句来让我们更进一步...

    Linux下使用tcpdump对网络数据包进行截获与分析

    概述

    ​ tcpdump可以将网络中传送的数据包完全截获下来供我们分析,它支持网络层、协议、主机、网络或端口号的过滤,并提供了and、or、not等逻辑语句来让我们更进一步筛选我们需要的数据。


    基本用法

    默认启动

    tcpdump

    默认情况下,直接使用tcpdump将默认监视第一个网络接口上传输的网络数据包.

    监视指定网络接口上传输的数据包

    tcpdump -i eth1

    上条指令将监视第二个以太网接口上传输的数据包,第一个是eth0.

    如果在测试自己编写的网络相关的代码时,需要截取本地的环回数据,则需要指定为监视环回数据,因为环回数据不经过以太网接口,指令如下:

    tcpdump -i lo

    监视指定主机上传输的数据包

    tcpdump host 192.168.12.34 and \ (192.168.34.56\ )

    监视IP为192.168.12.34和IP为192.168.34.56的主机上传输的数据包,这是使用and之后获取更准确更多数据的方法.

    也可以通过使用not or等逻辑词对截获条件进行更准确的限定.

    监视指定主机和端口上传输的数据包

    tcpdump host 192.168.12.34 and port 8080

    也可以在端口号前指定相关协议,更准确地抓取数据包.

    监视指定网络的数据包

    tcpdump net 192.168.12.34

    截获所有网络地址为192.168.12.34的网络数据包.


    PS:

    ​ 对于多数场景,基本用法差不多够用,但tcpdump的用法及范围不止于此,更多的操作方法可以查看系统文档。

    展开全文
  • Linux kernel过滤网络数据包

    千次阅读 2015-09-16 22:36:28
    原理剖析内核过滤数据包,第一个想到的是iptables,这个东西是用户的, 深入点就是netfilter了。 netfilter的5个钩子点可以实现这个。 内核熟悉点的人会知道layer7, 有的使用框架snort,layer7已经不更新,继承...
  • WinPcapLibpcap的最强大的特性之一,是拥有过滤数据包的引擎。它提供了有效的方法去获取网络中的某些数据包,这也是WinPcap捕获机制中的一个组成部分。用来过滤数据包的函数是 pcap_compile() pcap_...
  • 数据包过滤原理

    千次阅读 2013-04-08 14:56:00
     数据包过滤技术,顾名思义是在网络中适当的位置数据包实施有选择的通过,选择依据,即为系统内设置的过滤规则(通常称为访问控制表——Access Ccntrol List),只有满足过滤规则的数据包才被转发至相应...
  • wireshark对网络层的解析: 0100 ... -Version 4 表示协议 刚好有4位 ....0101 首部的总长度 0101刚好是5位字 ,一位代表4个字节 刚好是20bytes 中间的不解释 ,解释下flags:0x0000 这已经有16位 而标记是3位,...
  • Wireshark-数据包过滤和分析

    千次阅读 2013-10-18 11:28:11
    Wireshark中主要有两种过滤器,捕捉过滤显示过滤器。 捕捉过滤器:用于决定将什么样的信息记录在捕捉结果中。需要在开始捕捉前设置。 显示过滤器:在捕捉结果中进行详细查找。他们可以在得到捕捉结果后随意修改...
  • 可以把windows操作系统的网络构架粗略划分为6层,其中逻辑链路层、网络层和传输层都是通过传输驱动程序实现的,也叫做协议驱动程序。网络驱动接口标准(NDIS)用于windows环境下网络驱动程序的开发,NDIS提供了很多...
  • 一款改自IPHook的IP数据包监控过滤程序 By ccc 2009-6-13 完成(ch2zh1@tom.com) IP包过滤程序采用IPHook驱动器程序,在内核用钩子回调函数(IpHookFilter)勾住系统自带的IP过滤驱动器(System32\Drivers\...
  • 通过本次实验,熟悉sniffer的使用,并能通过sniffer设定过滤规则,指定的网络行为所产生的数据包进行抓取,并分析所抓取的数据包
  • 4.1 主机到网络层的过渡 从netif_receive_skb(struct sk_buff *skb)函数开始,网卡收到数据包后产生中断通知CPU有数据到达,在中断服务函数中触发接收软中断,等待内核在适当的时间调度NAPI方式的接收函数完成数据的...
  • Wireshark 数据包过滤规则

    千次阅读 2015-06-16 11:00:34
    Wireshark 包过滤规则 Wireshark CaptureFilters 英文原文地址:http://wiki.wireshark.org/CaptureFilte 翻译整理:dalerkd
  • 在windows过滤驱动中修改数据包内容,达到骗过上传软件的目的。
  • 过滤及分析数据包

    千次阅读 2016-01-07 10:41:38
    在WinPcap中用来过滤数据包的函数有两个,pcap_compile()pcap_setfilter()。pcap_compile()的原理是将高层的布尔过滤表达式编译成能够被过滤引擎所解释的低的字节码,关于布尔过滤表达式的语法会在后续的章节里...
  • 网络数据包解析

    千次阅读 2017-11-23 22:11:00
     网络层实现了数据包的选路转发。  传输层为两台主机上的应用程序提供端到端(end to end)的通信。  应用层负责处理应用程序的逻辑。 #1、先封装的协议头是传输层,传输层有TCP、UDP、TLS 、DCCP 、SCTP 、...
  • 通常我们只特定网络通信感兴趣。比如我们只打算监听Telnet服务(port 23)以捕获用户名口令信息。获知FTP(port 21)或DNS(UDP port 53)数据流感兴趣。可以通过pcap_compile()pcap_setfilter来设置...
  • 防火墙之数据包过滤iptables

    千次阅读 2019-09-23 15:58:52
    内容简介 防火墙的概述 1、iptables简介 2、iptables基础 ...它通过访问控制机制,确定哪些内部服务允许外部访问,以及允许哪些外部请求可以访问内部服务。它可以根据网络传输的类型决定IP包是否可以传进或...
  • 利用Wireshark截取ICMP数据包,并对数据包进行解析 wireshark安装文件下载地址:http://yunpan.cn/QiHGK5sPtWRyN (提取码:0bbc) 安装步骤: 解压文件之后,在\wireshark-win32-1.4.9中文版\文件夹中找到安装...
  • 网络数据包代理入门指南

    千次阅读 2020-07-01 17:47:07
    网络数据包代理(NPB)是一种类似交换机的网络设备,其大小从便携式设备到1U2 U单元机箱,再到大型机箱板卡系统。与交换机不同,除非明确指示,否则NPB不会以任何方式更改通过它的流量。NPB可以在一个或多个接口...
  • P欺诈,使用Winpcap对数据包进行拦截

    千次阅读 2011-12-28 15:47:21
    上一篇讲到了所有的网络数据包进行侦听,并过滤,得到自己想要分析的数据包数据包被侦听到了,但仍旧发送给了远程的服务器,若我们希望截获这些数据包,但不希望把这些数据被发送给远程服务器,那该如何解决呢?...
  • 基于网络设备接口进行数据包过滤 根据hook函数接收的参数中的 struct net_device 结构,net_device 结构体用于描述网络接口设备,其中name这个成员表示对应设备的名字,我们可以通过比对来判断数据包的源接口或...
  • TCP协议工作在网络层IP协议的基础上。本课程设计的目的是设计一个发送接收TCP数据包的程序,其功能是填充一个TCP数据包,发送给目的主机,并在目的主机接收此TCP数据包,将数据字段显示在标准输出上。 2.设计原理 ...
  • XDP 位于网卡驱动,当数据包经过 DMA 存放到 ring buffer 之后,分配 skb 之前,即可被 XDP 处理。由于 XDP 位于整个 Linux 内核网络软件栈的底部,能够非常早地识别并丢弃攻击报文,具有很高的性能。这为我们改善...
  • 它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。tcpdump是一个用于截取网络分组,并输出分组内容的工具。tcpdump凭借强大的功能灵活的截取策略,使其成为...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 44,979
精华内容 17,991
关键字:

对网络层数据包进行过滤和控制