在实际应用中,实现网络数据包捕获的技术代表是Libpcap。Libpcap是一个专业的跨平台的网络数据包捕获开发包。使用Libpcap可以很轻松地实现网络数据包的捕获功能。我们开始协议分析之前,要了解捕获数据包、过滤数据包、具体协议分析等。

网络协议技术分析

网络的核心是网络协议,网络协议分析技术在网络安全领域也是一项很重要的技术。那什么是网络协议技术分析!

我们通过Wireshark抓一个数据包来看看。

网络问题 mysql 如何抓包分析_协议分析


上面截图有很多协议,但是我们可以看出,网络协议分析是指对网络上的数据进行相应的协议分析。网络上的协议是多种多样的,截图的信息中包含了TCP、DNS、QUIC、TLS等。每种协议产生的数据是不相同的。

但是,一个网络数据归根结底是基于协议产生的,也就是说任意一个网络数据都使用了一定协议。究竟是什么协议?那我们就要对数据包进行协议分析,看数据包的整个协议内容,可以借助(Wireshark)来分析。

现在流行的协议是TCP/IP协议栈。它里面最核心的协议有Ethernet、ppp协议、ARP/RARP协议、IP协议、UDP、TCP协议、ICMP协议等等。当然还有很多应用协议,例如:HTTP、TLS、QUIC、DNS、FTP、IMAP、POP3协议等等。

新的协议层出不穷,各种各样的网络系统使用各种各样协议,我们只能使用到的时候在学习。

捕获数据包

对网络数据包的协议分析,第一步就是要捕获网络上的数据包,可以使用专业捕获数据开发包Libpcap。我们先来认识Libpcap的简单使用。

#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
#include <errno.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>

int main(int argc, char **argv)
{
	char *dev = NULL;
	char *net = NULL;
	char *mask = NULL;
	int ret = 0;
	char errbuf[PCAP_ERRBUF_SIZE] = {0};
	bpf_u_int32 netp = 0;       
	bpf_u_int32 maskp = 0;      
	struct in_addr addr;
	/* 获取本机的网络接口 */
	dev = pcap_lookupdev(errbuf);
	if(dev == NULL)
	{
		printf("%s\n",errbuf);
		exit(1);
	}

	printf("DEV: %s\n",dev);
	/* 获取网络地址和网络掩码*/
	ret = pcap_lookupnet(dev,&netp,&maskp,errbuf);
	if(ret == -1)
	{
		printf("%s\n",errbuf);
		exit(1);
	}
	
	addr.s_addr = netp;
	net = inet_ntoa(addr);
	if(net == NULL)
	{
		perror("inet_ntoa");
		exit(1);
	}
	printf("NET: %s\n",net);

	addr.s_addr = maskp;
	mask = inet_ntoa(addr);
	if(mask == NULL)
	{
		perror("inet_ntoa");
		exit(1);
	}
	printf("MASK: %s\n",mask);
	return 0;
}

编译运行:

网络问题 mysql 如何抓包分析_协议分析_02

上面的例子中libpcap用CPP编写的简单测试以提取接口,网络和掩码。

后面有时间我会对Libpcap做详细的讨论。

过滤数据包

我们在分析网络上的数据信息时,由于(Wireshark)抓包产生大量的协议,我们不可能对每个数据进行协议分析,并且在实际应用中有时只想分析某种具体协议,其他协议都不要考虑。这样,就需要捕获到的数据包进行过滤。

过滤的方式有两种,一种是在内核层就过滤掉,另一种是在应用层过滤。第一种的效率要高一些,因为从内核层到应用层之间的转换是很费力的,对性能有影响。

如果我们使用开发包Libpcap,它里面提供BPF过滤机制,它是在内核层实现过滤的。效率很高,而且BPF过滤机制进行了优化处理,效率明显改善。

使用Libpcap不仅实现了数据包的捕获功能,也可以实现数据包的过滤功能。

协议分析

捕获到的特定的网络数据包之后,就可以分析网络协议了,根据TCP/IP协议层次的概念,对网络数据包的协议分析是从链路层开始的。

网络问题 mysql 如何抓包分析_网络问题 mysql 如何抓包分析_03


首先分析数据包的链路层协议,如以太网协议等。其次根据链路层协议的分析网络协议,判断网络层的协议是什么。如IP协议等。

网络问题 mysql 如何抓包分析_网络问题 mysql 如何抓包分析_04

然后再根据网络层协议分析的结果分析传输层协议,如TCP协议,UDP协议等。

网络问题 mysql 如何抓包分析_网络数据_05


最后根据传输层协议分析应用层协议,如QUIC协议、FTP协议等等。

网络问题 mysql 如何抓包分析_网络协议_06


这样一层层地分析下去,就可以把整个数据包的协议都分析出来。

总结

使用网络协议分析技术可以设计专门的网络协议分析系统。很多著名的网络安全系统都是基于Libpcap而开发的,著名的网络数据包捕获和分析工具tcpdump。对于Libpcap,下一篇在讲解。