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

43 lines
1.6 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// 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;
}