c - 理解一个函数。 pcap 和 BPF

标签 c tcp network-programming pcap

在我尝试制作一个可以接收确认并创建连接的 TCP 程序时,我在示例程序中遇到了这个函数:

void *pth_capture_run(void *arg)
{
pcap_t *pd;
char *filter = "dst host 172.17.14.90 and ip";
char *dev = "fxp0";
char errbuf[PCAP_ERRBUF_SIZE];
bpf_u_int32 netp;
bpf_u_int32 maskp;
struct bpf_program  fprog;                  /* Filter Program   */
int dl = 0, dl_len = 0;

if ((pd = pcap_open_live(dev, 1514, 1, 500, errbuf)) == NULL) {
    fprintf(stderr, "cannot open device %s: %s\n", dev, errbuf);
    exit(1);
}

pcap_lookupnet(dev, &netp, &maskp, errbuf);
pcap_compile(pd, &fprog, filter, 0, netp);
if (pcap_setfilter(pd, &fprog) == -1) {
    fprintf(stderr, "cannot set pcap filter %s: %s\n", filter, errbuf);
    exit(1);
}
pcap_freecode(&fprog);
dl = pcap_datalink(pd);

switch(dl) {
    case 1:
        dl_len = 14;
        break;
    default:
        dl_len = 14;
        break;
}

if (pcap_loop(pd, -1, raw_packet_receiver, (u_char *)dl_len) < 0) {
    fprintf(stderr, "cannot get raw packet: %s\n", pcap_geterr(pd));
    exit(1);
}
}

现在我了解到此函数打开 BPF 设备并设置数据包过滤器,然后等待数据包到达。然而,作为网络编程的新手,我不熟悉各种 pcap 函数,并且仍然有点不清楚这个函数简单来说是做什么的以及它是如何做的。我已经完成了本教程:http://yuba.stanford.edu/~casado/pcap/section1.html 但我还是有点困惑。你们谁能用更简单的语言解释一下吗?谢谢!

最佳答案

看来你已经弄清楚了这个函数,至少在逻辑上,对于第一个 if 语句,它尝试打开你正在监听的设备,如果失败则打印错误,第二个 if 语句设置 pcap编译后进行过滤。

如果您想了解有关特定函数及其参数的更多信息,您实际上应该查看手册页,例如

man pcap_open_live

关于c - 理解一个函数。 pcap 和 BPF,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11659880/

相关文章:

c - 如何在 XLib 中创建半透明的白色窗口

java - 为什么这段代码不能在Java中运行?

c - 设置 TCP_QUICKACK 和 TCP_NODELAY

qt - 如何通过 QT 中的特定网络接口(interface)写入数据报?

将 C 变量转换为 JSON 格式

node.js 缓冲 tcp 数据和分隔符

c# - 如何判断tcp是否连接?

java - SocketServer与socket通信

c - c - 套接字编程中的发送和接收结构

c - 我的代码无法按预期运行,我想运行操作结果,问题是什么?