qfedu-network-advanced-level/day7/pcap1.c

43 lines
1.6 KiB
C
Raw Normal View History

2023-09-13 09:03:55 +08:00
// libpcap 开发
/*
libpcap是一个用于捕获网络数据包的库
使libpcap时-lpcap选项使libpcap库Unix-like系统的编译环境使GCC编译器时
*/
#include <pcap.h> // libpcap头文件
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h> // 网络地址转换函数,如inet_ntoa()->将网络地址转换成“.”点隔的字符串格式
int main(int argc, char const *argv[])
{
// 1. 获取可用的网络设备名称
char err_buf[PCAP_ERRBUF_SIZE]; // 错误信息缓冲区
char *dev = pcap_lookupdev(err_buf); // 获取网络设备名称: err_buf用于存储错误信息
// char *dev = pcap_lookupdev(NULL); // NULL表示获取默认网络设备
if (dev != NULL)
{
printf("网络设备名称: %s\n", dev);
}
else
{
printf("获取网络设备名称失败: %s\n", err_buf);
return 1;
}
// 2. 获取网卡的网络号和子网掩码
bpf_u_int32 netip;
bpf_u_int32 netmask;
if ((pcap_lookupnet(dev, &netip, &netmask, NULL)) == 0)
{
unsigned char ip[16] = "";
unsigned char mask[16] = "";
inet_ntop(AF_INET, &netip, ip, 16); // inet_ntop()将网络地址转换成“.”点隔的字符串格式
inet_ntop(AF_INET, &netmask, mask, 16);
printf("网卡网络号: %s 子网掩码: %s\n", ip, mask);
}
return 0;
}