基于Liunx与C语言的网络抓包学习(pcap.h)

  首先,利用终端配置好gcc的环境,然后还要配置上libpcap的环境,以上通过相关文章进行学习。

<pcap.h>

    首先,先能得到数据包的包的长度。这里用到的头文件是pcap.h,其中用到的有pcap_if_t数据类型。

  pcap_if_t 保存网卡基本信息的类型。通常用指针来使用,pcap_if_t *alldevs。

  当然,很多时候pcap_if_t可以用pcap_if进行替代。

struct pcap_if
{
    struct pcap_if *next;//指向下一个网卡
    char *name;//网卡的标识符,唯一识别一个网卡
    char *description;//用来描述网卡
    struct pcap_addr*address;//网卡的地址,包括IP地址,网络掩码,广播地址等,类型中的成员变量在后面会写到
    bpf_u_int32 flags;//接口标志
}

  然后写一个简单的测试。

#include <pcap.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>

int main()
{
    pcap_if_t *alldevs;
    char errbuf[PCAP_ERRBUF_SIZE];
    if(pcap_findalldevs(&alldevs, errbuf) == -1)
    {
        printf("Error in pcap_findalldevs: %s\n", errbuf);
        exit(EXIT_FAILURE);
    }
    for(; device->name != NULL; device = device->next)
    {
        printf("Device name: %s\n", device->name);
        printf("Descripetion: %s\n", device->description);
    }
    pcap_freealldevs(alldevs);
    return 0;
}

  其中,PCAP_ERRBUF_SIZE恒定为256,可以认为#define PCAP_ERRBUF_SIZE 256 。

pcap_findalldevs(pcap_if_t **, char *) 函数

  函数pcap_findalldevs的作用是获取网络设备,pcap_open_live要打开的网卡名称, 在linux中一般都选第一块网卡。

功能:列出当前所有可用的网络设备(网卡)

所在头文件:pcap.h

参数说明: pcap_if_t ** alldevsp 指向pcap_if_t结构列表的指针的地址。实际使用时,声明一个pcap_if_t结构的指针(pcap_if_t *alldevsp),然后把该地址作为参数传入即可(&alldevs)。
char * errbuf  错误缓冲区,要求长度至少为PCAP_ERRBUF_SIZE字节。

返回值: -1:出错,将会向错误缓冲中填充错误信息,错误信息为ASCII码,可以直接打印出来。

返回值: 0:正确返回,可以使用alldevs访问所有网络硬件。

 

另外,EXIT_FAILURE 可以看作#define EXIT_FAILURE 1。

pcap_freealldevs(pcap_if_t *)函数

pcap_freealldevs(alldevs);

功能:释放所指的设备

参数:alldevs指向设备的pcap_if_t类型

无返回值

如何执行/使用

  在终端cd到你的“main.c”文件的当前目录之下,然后执行 :

gcc main.c -o pcap -lpcap

然后再用sudo执行:

sudo ./pcap

然后就可以在终端中看到你的包的信息了。

 如上图所示。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wuliwuliii

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值