[笔记] libpcap编译及使用

news/2025/2/14 8:26:08/

文章目录

  • 前言
  • libpcap库安装
    • 安装编译
    • ./configure 时 报错:Neither flex nor lex was found
  • libpcap库使用
  • 总结


前言

官网

libpcap库安装

环境:
centos 7.9

安装编译

libpcap 下载

tar -zxvf libpcap-1.10.4
cd libpcap-1.10.4 
./configure
make && make install

./configure 时 报错:Neither flex nor lex was found

yum install flex lex

libpcap库使用

https://www.tcpdump.org/pcap.html

此处实现的是抓tcp syn包

#include <iostream>
#include <pcap.h>
#include <netinet/ip.h>
#include <netinet/tcp.h>
#include <netinet/ether.h>void packetHandler(unsigned char* userData, const struct pcap_pkthdr* pkthdr, const unsigned char* packetData) {struct ethhdr* ethHeader = (struct ethhdr*)packetData;if (ntohs(ethHeader->h_proto) == ETH_P_IP) {struct iphdr* ipHeader = (struct iphdr*)(packetData + sizeof(struct ethhdr));if (ipHeader->protocol == IPPROTO_TCP) {struct tcphdr* tcpHeader = (struct tcphdr*)(packetData + sizeof(struct ethhdr) + ipHeader->ihl * 4);if (tcpHeader->syn) {char source_ip[INET_ADDRSTRLEN];char dest_ip[INET_ADDRSTRLEN];inet_ntop(AF_INET, &ipHeader->saddr, source_ip, INET_ADDRSTRLEN);inet_ntop(AF_INET, &ipHeader->daddr, dest_ip, INET_ADDRSTRLEN);printf("Received TCP SYN packet from %s:%u to %s:%u\n",source_ip, ntohs(tcpHeader->source),dest_ip, ntohs(tcpHeader->dest));}}}
}int main2(int argc, char *argv[])
{char *dev, errbuf[PCAP_ERRBUF_SIZE];dev = pcap_lookupdev(errbuf);if (dev == NULL) {fprintf(stderr, "Couldn't find default device: %s\n", errbuf);return(2);}printf("Device: %s\n", dev);return(0);
}int main3() {char errbuf[PCAP_ERRBUF_SIZE];pcap_if_t* alldevs;pcap_if_t* device;// 获取系统上的所有网络设备if (pcap_findalldevs(&alldevs, errbuf) == -1) {std::cerr << "Error finding devices: " << errbuf << std::endl;return 1;}// 遍历并打印设备列表int deviceCount = 0;for (device = alldevs; device != nullptr; device = device->next) {deviceCount++;std::cout << "Device " << deviceCount << ": " << device->name << std::endl;if (device->description)std::cout << "    Description: " << device->description << std::endl;elsestd::cout << "    Description: N/A" << std::endl;}// 释放设备列表pcap_freealldevs(alldevs);return 0;
}int main() {char errbuf[PCAP_ERRBUF_SIZE];pcap_t* handle;// 打开网络设备或捕获文件,这里使用默认网络设备 "eth0",你需要根据实际情况修改handle = pcap_open_live("ens33", BUFSIZ, 1, 1000, errbuf);if (handle == nullptr) {std::cerr << "Error opening device: " << errbuf << std::endl;return 1;}// 开始捕获数据包,packetHandler 是回调函数,每捕获一个数据包都会调用它if (pcap_loop(handle, 0, packetHandler, nullptr) < 0) {std::cerr << "Error in pcap_loop" << std::endl;return 1;}// 关闭捕获会话pcap_close(handle);return 0;
}

注意:
使用vscode,c++ debug时 链接pcap库 g++执行加“-lpcap“
并且 加 “-std=gnu++0x” 避免c++11特性不支持报错

总结

以上就是今天要讲的内容,本文仅仅简单介绍了libpcap安装和使用。

参考:
libpcap库使用
libpcap简单使用


关于博主

wx/qq:binary-monster/1113673178
CSDN:https://blog.csdn.net/qq1113673178
码云:https://gitee.com/shiver
Github: https://github.com/ShiverZm
个人博客:www.shiver.fun


http://www.ppmy.cn/news/1033906.html

相关文章

设置返回列表元素上限

我正在「拾陆楼」和朋友们讨论有趣的话题&#xff0c;你⼀起来吧&#xff1f;拾陆楼知识星球入口 在get_cell &#xff0c;get_nets&#xff0c;get_xx等操作时返回的值上限是100&#xff0c;后面的就用...省略了&#xff0c;如果要修改这个上限&#xff0c;需要用下面命令: s…

海归事迹|记斯坦福大学博士后王成坤

王成坤&#xff0c;国内博士毕业后即赴美国斯坦福大学从事5年博士后研究&#xff0c;期间累计发表SCI论文23篇&#xff0c;总影响因子300&#xff0c;授权专利6项。现为南京医科大学高层次引进人才、教授、博士研究生导师、独立学术带头人。本期知识人网小编特做介绍。 百度百科…

ROS2 学习(二)工作空间,节点

工作空间介绍 workspace 是存放整个项目的大目录。 其中包含&#xff1a; src&#xff1a;源码。 build&#xff1a;编译文件。 install&#xff1a;安装空间&#xff0c;存放编译成功后的目标文件。 log&#xff1a;日志。 我们新建一个工作空间目录&#xff0c;其中包…

麦肯锡发布《2023科技趋势展望报告》,生成式AI、下一代软件开发成为趋势,软件测试如何贴合趋势?

近日&#xff0c;麦肯锡公司发布了《2023科技趋势展望报告》。报告列出了15个趋势&#xff0c;并把他们分为5大类&#xff0c;人工智能革命、构建数字未来、计算和连接的前沿、尖端工程技术和可持续发展。 类别一&#xff1a;人工智能革命 生成式AI 生成型人工智能标志着人工智…

实习笔记(一)

自定义注解&#xff1a; 自定义注解中有三个元注解Target,Retention,Document /*** 系统日志注解** author Mark sunlightcsgmail.com*/ Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface SysLog {String value() default "…

Linux怎样处理网络请求——彻底理解IO多路复用

常见的网络IO模型 网络 IO 模型分为四种&#xff1a;同步阻塞 IO、同步非阻塞IO、IO 多路复用、异步非阻塞 IO(Async IO, AIO)&#xff0c;其中AIO为异步IO&#xff0c;其他都是同步IO 同步阻塞IO 同步阻塞IO&#xff1a;在线程处理过程中&#xff0c;如果涉及到IO操作&…

Python 基础语法 | 常量表达式,变量,注释,输入输出

常量和表达式 我们可以把 Python 当成一个计算器&#xff0c;来进行一些算术运算 print(1 2 - 3) # 0 print(1 2 * 3) # 7 print(1 2 / 3) # 1.6666666666666665注意&#xff1a; print 是一个 Python 内置的 函数可以使用 - * / () 等运算符进行算术运算&#xff0c;先…

Python采集天气数据,做可视化分析【附源码】

嗨害大家好鸭&#xff01;我是小熊猫~ 毕业设计大家着急吗&#xff1f; 没事&#xff0c;我来替大家着急 源码、素材python永久安装包:点击此处跳转文末名片获取 本文知识点: 动态数据抓包 requests发送请求 结构化非结构化数据解析 开发环境: python 3.8 运行代码 pycharm 2…