2023年7月23日发(作者:)
聊⼀聊⽹络协议分析技术!⽹络数据包捕获技术Libpcap在实际应⽤中,实现⽹络数据包捕获的技术代表是Libpcap。Libpcap是⼀个专业的跨平台的⽹络数据包捕获开发包。使⽤Libpcap可以很轻松地实现⽹络数据包的捕获功能。我们开始协议分析之前,要了解捕获数据包、过滤数据包、具体协议分析等。⽹络协议技术分析⽹络的核⼼是⽹络协议,⽹络协议分析技术在⽹络安全领域也是⼀项很重要的技术。那什么是⽹络协议技术分析!我们通过Wireshark抓⼀个数据包来看看。上⾯截图有很多协议,但是我们可以看出,⽹络协议分析是指对⽹络上的数据进⾏相应的协议分析。⽹络上的协议是多种多样的,截图的信息中包含了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
bpf_u_int32 maskp = 0;
struct in_addr addr; /*
获取本机的⽹络接⼝ */ dev = pcap_lookupdev(errbuf); if(dev == NULL) { printf("%sn",errbuf); exit(1); } printf("DEV: %sn",dev); /*
获取⽹络地址和⽹络掩码*/ ret = pcap_lookupnet(dev,&netp,&maskp,errbuf); if(ret == -1) { printf("%sn",errbuf); exit(1); }
addr.s_addr = netp; net = inet_ntoa(addr); if(net == NULL) { perror("inet_ntoa"); exit(1); } printf("NET: %sn",net); addr.s_addr = maskp; mask = inet_ntoa(addr); if(mask == NULL) { perror("inet_ntoa"); exit(1); } printf("MASK: %sn",mask); return 0;}编译运⾏:上⾯的例⼦中libpcap⽤CPP编写的简单测试以提取接⼝,⽹络和掩码。后⾯有时间我会对Libpcap做详细的讨论。过滤数据包我们在分析⽹络上的数据信息时,由于(Wireshark)抓包产⽣⼤量的协议,我们不可能对每个数据进⾏协议分析,并且在实际应⽤中有时只想分析某种具体协议,其他协议都不要考虑。这样,就需要捕获到的数据包进⾏过滤。过滤的⽅式有两种,⼀种是在内核层就过滤掉,另⼀种是在应⽤层过滤。第⼀种的效率要⾼⼀些,因为从内核层到应⽤层之间的转换是很费⼒的,对性能有影响。如果我们使⽤开发包Libpcap,它⾥⾯提供BPF过滤机制,它是在内核层实现过滤的。效率很⾼,⽽且BPF过滤机制进⾏了优化处理,效率明显改善。使⽤Libpcap不仅实现了数据包的捕获功能,也可以实现数据包的过滤功能。协议分析捕获到的特定的⽹络数据包之后,就可以分析⽹络协议了,根据TCP/IP协议层次的概念,对⽹络数据包的协议分析是从链路层开始的。⾸先分析数据包的链路层协议,如以太⽹协议等。其次根据链路层协议的分析⽹络协议,判断⽹络层的协议是什么。如IP协议等。然后再根据⽹络层协议分析的结果分析传输层协议,如TCP协议,UDP协议等。最后根据传输层协议分析应⽤层协议,如QUIC协议、FTP协议等等。这样⼀层层地分析下去,就可以把整个数据包的协议都分析出来。总结使⽤⽹络协议分析技术可以设计专门的⽹络协议分析系统。很多著名的⽹络安全系统都是基于Libpcap⽽开发的,著名的⽹络数据包捕获和分析⼯具tcpdump。对于Libpcap,下⼀篇在讲解。
发布者:admin,转转请注明出处:http://www.yc00.com/web/1690104307a306185.html
评论列表(0条)