首先用ifconfig去查询本机的网卡,然后在主函数中修改
这里的enp9s0就是我们需要的
/* capture_packet.c - 截获所有以太网帧数据并进行具体分析 */
/* 常用函数的头文件 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <unistd.h>
#include <signal.h>
/* 与网络相关的头文件 */
#include <netinet/ip_icmp.h>
#include <net/if_arp.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netinet/ip.h>
#include <netdb.h>
#include <netinet/tcp.h>
#include <netinet/udp.h>
#include <signal.h>
#include <net/if.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <linux/if_ether.h>
#include <net/ethernet.h>
#include <linux/igmp.h>
#include <netinet/tcp.h>
/* 全局变量结构的结构体原型 - 包含要记录的任何全局信息 */
struct global_info {
unsigned int bytes; /* 网卡接收的总字节数 */
unsigned int packet_num; /* 网卡接受的帧的总数量,帧其实就是分片 */
unsigned int packet_arp; /* 接收到的arp包的数量 */
int print_flag_frame; /* 是否打印帧头信息标志, 1表示打印, 0表示不打印 flag是国旗标志的意思,frame是框架结构画面的意思 */
int print_flag_arp; /* 是否打印arp头信息标志 */
};
/* 定义一个全局变量,用于存储全局信息 */
struct global_info global;
struct ip_pair {
unsigned int source_ip;//源ip地址
unsigned int dest_ip;//目的ip地址
unsigned int count;//?我不知道
};
/* 定义一个用于存储ip对的结构体数组 这个数组应该是用来存储抓到的ip包的地址*/
struct ip_pair ip_pair[10000];
/* 一个用于初始化全局信息的函数 */
void init_global( struct global_info * var );//这里定义了一个无类型的初始化函数,利用了global_info结构体来定义了一个名为var的指针
/* 一个用于打印全局信息的函数 */
void print_global( struct global_info var );//这里和上面又不一样,它是定义了一个global_info结构体的实例
/* 打印一个错误,并退出 */
void error_and_exit( char * msg, int exit_code );//char * msg这里是定义了一个字符类型的指针msg
/* 设置网卡成混杂模式 */
int set_card_promisc( char * interface_name, int sock );//同样的道理,这里是定义了一个字符类型的指针interface_name
/* 把mac地址转换一个字符串 */
void mac_to_str( char * buf, char * mac_buf );
/* 用于打印帮助信息 */
void