iis服务器助手广告
返回顶部
首页 > 资讯 > 操作系统 >Linux下如何编写网络抓包程序代码
  • 159
分享到

Linux下如何编写网络抓包程序代码

2023-06-13 05:06:13 159人浏览 泡泡鱼
摘要

这期内容当中小编将会给大家带来有关linux下如何编写网络抓包程序代码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。类UNIX操作系统上提供了三种不同的方式访问数据链路层,分别是BSD的BSD分组过滤器(

这期内容当中小编将会给大家带来有关linux下如何编写网络抓包程序代码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

类UNIX操作系统上提供了三种不同的方式访问数据链路层,分别是BSD的BSD分组过滤器(BPF)、SVR4的数据链路提供者接口(DLPI)和Linux的SOCK_PACKET接口。幸运的是,程序员不需要了解这些不同接口的细节,直接使用Libpcap函数库就可以。
Libpcap是一个提供了针对网络数据包捕获系统的高层接口的开源函数库。其作用是提供独立于平台的应用程序接口,以消除程序中针对不同操作系统所包含的数据包捕获代码模块。这样以来,就解决了程序移植性的问题,有利于提高开发的效率。
Libpcap运行于大多数类UNIX操作系统上,完整的文档和源码可以从tcpdump的官方网站上获得: Http://www.tcpdump.org 其windows版本 Winpcap可已从 http://www.winpcap.org获取。下面介绍如何使用Libpcap来捕获数据包
char *pcap_lookupdev(char *errbuf);
功能:查找用于捕获数据包的缺省设备
errbuf :错误时保存出错信息
返回值:成功时返回设备名称;出错时返回NULL
pcap_t *pcap_open_live(const char *device, int snaplen, int promisc, int to_ms, char *errbuf);
功能:打开用于捕获数据包的网络设备
device:设备名称
snaplen:要捕获的数据包的最大字节数
prosmic:网络设备工作模式(0表示非混杂模式,其他值表示混杂模式)
to_ms: 从内核空间复制数据前等待的时间
err_buf:错误时保存出错信息
返回值:成功时返回pcap_t类型的接口描述符(句柄);出错时返回NULL
const u_char *pcap_next(pcap_t *p, struct pcap_pkthdr *h);
功能:捕获下一个数据包
p:接口描述符
h:捕获的数据包的信息
返回值:成功时返回指向捕获的数据的指针;出错时返回NULL
typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes);
const u_char *pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user);
功能: 捕获下一个数据包
cnt :要捕获的数据包的个数
callback :捕获到数据包时执行的回调函数
user:传递给回调函数的参数
返回值:成功时返回0;出错时返回-1
int pcap_compile(pcap_t *p, struct bpf_program *fp, char *str, int optimize, bpf_u_int32 netmask);
功能:创建过滤器
p :接口描述符
fp:指向保存过滤器的结构体的指针
str:要转化的过滤规则
optimize: 过滤器是否要优化
netmask:网络掩码
返回值:成功时返回0;出错时返回-1
int pcap_setfilter(pcap_t *p, struct bpf_program *fp);
功能: 安装过滤器
p:接口描述符
fp:指向包含过滤器的结构体的指针
返回值:成功时返回0;出错时返回-1
以下实例代码实现捕获并显示3个ARP包

代码如下:


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <pcap.h>
#define MAXBYTES2CAPTURE 2048
void ProcessPacket(u_char *arg, const struct pcap_pkthdr *pkthdr, const u_char *packet)
{
int i = 0, *counter = (int *)arg;
printf("Packet Count : %d\n", ++(*counter));
printf("Received Packet Size: %d\n", pkthdr->len);
printf("Payload:\n");
for (i=0; i<pkthdr->len; i++)
{
printf("%02x ", (unsigned int)packet[i]);
if ( (i%16 = = 15 && i != 0) || (i = = pkthdr->len -1))
{
printf("\n");
}
}
printf("\n\n************************************************\n");
return;
}
int main(int arGC, char *argv[])
{
int i = 0, count = 0;
pcap_t *descr = NULL;
char errbuf[PCAP_ERRBUF_SIZE], *device = NULL;
bpf_u_int32 netaddr = 0, mask = 0;
struct bpf_program filter;
memset(errbuf, 0, sizeof(errbuf));
if (argc != 2)
{
device = pcap_lookupdev(errbuf);
}
else
{
device = argv[1];
}
printf("Try to open device %s\n", device);
if((descr = pcap_open_live(device, MAXBYTES2CAPTURE, 1, 0, errbuf)) = =NULL)
{
printf("error : %s\n", errbuf);
exit(-1);
}
pcap_lookupnet(device, &netaddr, &mask, errbuf);
if (pcap_compile(descr, &filter, "arp and ether host 00:0c:29:b7:f6:33",0, mask) < 0)
{
printf("pcap_compile error\n");
exit(-1);
}
pcap_setfilter(descr, &filter);
pcap_loop(descr, 3, ProcessPacket, (u_char *)&count);
return 0;
}

上述就是小编为大家分享的Linux下如何编写网络抓包程序代码了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网操作系统频道。

--结束END--

本文标题: Linux下如何编写网络抓包程序代码

本文链接: https://www.lsjlt.com/news/265656.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Linux下如何编写网络抓包程序代码
    这期内容当中小编将会给大家带来有关Linux下如何编写网络抓包程序代码,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。类UNIX操作系统上提供了三种不同的方式访问数据链路层,分别是BSD的BSD分组过滤器(...
    99+
    2023-06-13
  • VB.NET下载程序实现代码怎么编写
    今天就跟大家聊聊有关VB.NET下载程序实现代码怎么编写,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。对于VB.NET语言的应用来说,其中有很多小技巧值得我们去掌握,来充实我们的开发...
    99+
    2023-06-17
  • Java函数教程:在Linux系统下如何编写高效代码?
    Java是一种高级编程语言,它被广泛地应用于各种领域。在Linux系统下编写Java代码需要考虑一些特殊的问题,因为Linux系统与Windows系统有很大的不同。在本篇文章中,我们将介绍如何在Linux系统下编写高效的Java函数。 ...
    99+
    2023-08-13
    教程 函数 linux
  • 如何高效编写网页代码
    这篇文章主要介绍了如何高效编写网页代码,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文从三个方面着手,一个是企业网站的建设(教育政府类也归纳到企业站点里),二是小型门户站点...
    99+
    2023-06-08
  • Linux下的PHP IDE:如何更好地编写对象代码?
    随着Web应用的不断发展,PHP作为一种强大的服务器端语言,越来越受到程序员们的欢迎。而在Linux系统中,PHP的开发工具也越来越多,其中PHP IDE是最为常用的一种。那么,在Linux下如何更好地编写对象代码呢?本文将为大家介绍一些...
    99+
    2023-07-05
    ide linux 对象
  • 编程开发中如何写代码
    这篇文章给大家分享的是有关编程开发中如何写代码的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1. 标识符(命名规则)标识符应当直观且可以拼读,可望文知意,***采用英文单词或其组合,便于记忆和阅读,切忌使用汉语拼...
    99+
    2023-06-17
  • 程序员如何写出好代码?
    作为一名程序员,我渴望我加入的应该要是一支“30%的时间在写代码,而70%的时间在喝着咖啡讨论着如何将产品做好”的团队。我觉得软件工作应该成为一项技术和艺术融合的高智力活动,我们的项目经理应该是一个高度理解质量、范围和进度客观规律的明白人,...
    99+
    2023-06-02
  • Golang开发建议:如何编写高效的网络通信代码
    Golang(又称Go)是由Google开发的一种编程语言,它具有简洁、高效、并发性强等特点,越来越受到开发者的欢迎。在网络通信方面,Golang提供了丰富的库和工具,使得编写高效的网络通信代码变得相对简单。本文将分享一些Golang开发的...
    99+
    2023-11-22
    Golang 网络通信 高效编写
  • 如何编写Linux下CentOS查后门程序的shell脚本
    这篇文章主要讲解了“如何编写Linux下CentOS查后门程序的shell脚本”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“如何编写Linux下CentOS查后门程序的shell脚本”吧!每...
    99+
    2023-06-09
  • Linux下如何安装程序包管理程序Flatpak
    这篇文章将为大家详细讲解有关Linux下如何安装程序包管理程序Flatpak,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Flatpak是一个程序包管理实用程序,可让您分发,安装和管理软件,而不必担心依赖...
    99+
    2023-06-27
  • Linux系统下的Java函数教程:学习如何编写优化的代码。
    Linux系统下的Java函数教程:学习如何编写优化的代码 Java是一种非常流行的编程语言,可以在各种不同的操作系统上运行。Linux系统是Java开发人员最喜欢的操作系统之一,因为它非常稳定,而且可以使用各种不同的工具和应用程序来开发J...
    99+
    2023-08-13
    教程 函数 linux
  • 如何把java代码打包成程序
    将Java代码打包成程序通常使用Java开发工具包(JDK)中的工具javac和jar。以下是一些步骤: 编写Java代码并保存...
    99+
    2024-04-02
  • 如何使用linux网络编程用到的网络函数
    本篇内容主要讲解“如何使用linux网络编程用到的网络函数”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用linux网络编程用到的网络函数”吧!一.概念介绍网络程序分为服务端程序和客户端程...
    99+
    2023-06-09
  • 如何在Linux上使用Python编写Numpy代码?
    在Linux上使用Python编写Numpy代码,能够让我们更加高效地处理数学计算和科学数据。Numpy是一个Python库,提供了多维数组对象和用于处理数组的函数。本文将介绍如何在Linux上使用Python编写Numpy代码,希望对初学...
    99+
    2023-10-27
    linux 教程 numpy
  • 如何编写局域网远程开机软件制作代码
    本篇内容主要讲解“如何编写局域网远程开机软件制作代码”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何编写局域网远程开机软件制作代码”吧!代码如下:#include<unistd.h>...
    99+
    2023-06-09
  • ASP API教程:如何编写高效代码?
    ASP API是一种广泛应用于Web开发的技术,它可以帮助我们快速开发高效的Web应用程序。但是,在使用ASP API时,我们经常会遇到一些性能问题,这些问题会影响我们的应用程序的速度和响应时间。那么,如何编写高效的ASP API代码呢?...
    99+
    2023-11-06
    api 教程 学习笔记
  • 如何编写Python代码设置各平台下代理配置
    如何编写Python代码设置各平台下代理配置,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。今天带来的是用Python代码设置各个平台下so...
    99+
    2024-04-02
  • 学习 Go 语言:如何在 Linux 上编写代码?
    Go 语言自发布以来,已经成为了一种广泛使用的编程语言。它被设计成一门高效、可靠、简单易用的语言,可应用于各种用途。在本文中,我们将探讨如何在 Linux 操作系统上使用 Go 语言编写代码。 安装 Go 在开始编写 Go 代码之前,...
    99+
    2023-07-28
    关键字 教程 linux
  • 如何在 Linux 上使用 Shell 编写 Django 程序
    在 Linux 上使用 Shell 编写 Django 程序 Django 是一个开源的 Web 框架,它基于 Python 编程语言,拥有良好的可扩展性和高度的安全性,因此在 Web 开发领域中得到了广泛的应用。在 Linux 上使用 D...
    99+
    2023-10-15
    django linux shell
  • PHP教程:如何使用编程算法在Linux系统中编写高效的代码?
    在Linux系统中编写高效的PHP代码需要掌握一些编程算法技巧。本文将介绍一些基本的算法知识,以及如何在PHP中应用这些算法来编写高效的代码。 一、算法基础知识 算法是一种解决问题的方法,是一系列解决问题的步骤。一个好的算法应该满足以下几...
    99+
    2023-09-10
    教程 编程算法 linux
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作