理解什么是DSR,嗅探器视角下的IP和MAC地址识别(C/C++代码实现)

2024-06-24 07:12

本文主要是介绍理解什么是DSR,嗅探器视角下的IP和MAC地址识别(C/C++代码实现),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

网络嗅探器是监控和分析网络流量的一种工具,它能够捕获数据包并提取出关键的信息,比如IP地址和MAC地址。

网络嗅探器工作原理基于网卡的工作模式。正常情况下,网卡只处理发送给它的数据包,忽略其他数据。但是,如果将网卡设置为“混杂模式”,那么它可以接收到网络上所有的数据包,而不仅仅是发给它的数据包。网络嗅探器就是利用了这一特性来捕获网络上的数据交换。

数据包是网络通信的基本单位,包含了传输数据和控制信息。在数据包中,源IP地址、目标IP地址、源MAC地址和目标MAC地址是关键字段,用于标识数据包的出发点和目的地。以下是这些字段的分析:

  1. MAC地址

MAC地址是硬件地址,通常指网络接口卡(NIC)的地址。它是独一无二的,由6字节(48位)组成,通常表示为12位十六进制数(例如:00:1A:2B:3C:4D:5E)。在数据包中,MAC地址用于在局域网(LAN)中定位设备。

  1. 以太类型

以太类型字段指示了数据包中上层协议的类型。例如,如果此字段的值为0x0800,则表示网络层协议为IPv4;0x0806表示ARP。

  1. IP地址

IP地址是网络层(OSI模型的第三层)的地址,用于在不同网络间路由数据包。每个IP数据包头部包含源IP地址和目标IP地址,各为4字节(32位)长。

  1. 协议

此字段指明了传输层的协议类型。例如,值6表示TCP,值17表示UDP。

当网络嗅探器捕获到数据包后,它会解析出这些关键字段。这允许管理员或安全专家进行进一步的分析,如检测网络中的异常活动、性能问题或安全隐患。

为了更深入地理解这个过程,可以想象一个简单的场景,假设在一个局域网内,一台机器(我们称其为A)想要与另一台机器(称为B)通信。

  1. 机器A知道机器B的IP地址,但不知道其MAC地址。因此,它首先发送一个ARP请求来查询B的MAC地址。

  2. ARP请求被网络嗅探器捕获,嗅探器读取其中的MAC和IP地址信息。

  3. 一旦得到响应,ARP响应也会被嗅探器捕获。此时,嗅探器可以记录B的MAC和IP地址。

  4. 知道了MAC地址后,机器A开始向B发送数据包。这些数据包同样会被嗅探器捕获,嗅探器从中提取出IP和MAC地址信息。

嗅探器工作机制的详细介绍

  1. 混杂模式
    • 嗅探器通过将网卡设置为“混杂模式”,使其能接收通过网络的所有数据包,而不仅仅是发给自己的数据包。
    • 在这种模式下,嗅探器可以全面监控网络流量,从而更全面地了解网络活动情况。
  2. 数据包解析
    • 嗅探器对捕获到的数据包进行解析,提取关键信息如源地址、目标地址、协议类型等,以便后续分析和处理。
    • 解析过程中,嗅探器会还原出IP头、TCP头或UDP头等数据内容,从而得到数据包中的重要信息。
  3. 网络流量分析
    • 通过对捕获的数据包进行深入分析和统计,嗅探器可以检测异常流量、识别网络攻击、监测网络性能等。
    • 这些分析结果为网络管理和安全提供重要参考,帮助发现并解决潜在问题。
  4. 数据包抓取
    • 嗅探器采用多种技术和策略来确保能抓到所需的数据包,例如黑白名单过滤、持续抓包和确认应答技术。
    • 这些技术帮助嗅探器在复杂的网络环境中有效工作,提高抓包的准确性和效率。
  5. 数据包解析
    • 对于已捕获的数据包,嗅探器通过解码压缩、数据包分割、标识符过滤和重组数据包等多种解包技术进行解析。
    • 这些技术帮助嗅探器从数据包中提取有用信息,并对数据进行深入分析。

DSR 的工作原理、主要特点、应用场景以及优缺点

Direct Server Return (DSR) 是一种网络通信优化技术,主要用于改善数据中心的网络性能和减少延迟。DSR 通过允许服务器直接响应客户端的请求,跳过不必要的网络跳转,从而提高数据传输效率。这项技术在处理大规模、高流量的网络环境中尤其有效,例如在 Kubernetes 集群或负载均衡器配置中。

  1. 工作原理
    • 传统模式下的工作方式:在传统的网络架构中,一个来自客户端的请求先到达服务器节点,如果该请求的处理服务器不在同一节点上,请求会被重定向到另一个节点。这种重定向通常会导致额外的网络跳转,增加延迟并降低效率。
    • DSR 模式下的工作方式:启用 DSR 后,请求仍然首先到达入口节点,但处理请求的服务器直接向客户端返回数据,不再经过入口节点。这样可以减少一跳,从而减少延迟和提高数据传输速度。
    • 保持源 IP 地址:在 DSR 模式下,由于避免了额外的跳转,因此可以保持客户端的源 IP 地址不变。这对于某些需要IP透明性的应用场景(如某些安全监控和日志记录)非常重要。
  2. 主要特点
    • 减少延迟:由于避免了网络中的额外跳转,DSR 显著减少了数据传输的延迟。这对于延迟敏感的应用(如在线游戏、实时视频会议等)尤其重要。
    • 提高效率:DSR 通过优化数据传输路径,提高了网络资源的利用效率。这不仅提高了单个请求的响应速度,还有助于整个网络环境的负载均衡和管理。
    • 增强安全性:保持源 IP 地址不变有助于实现更安全的网络监控和审计。因为源 IP 地址的真实性得到了保证,安全人员可以更准确地追踪和防范潜在的网络攻击。
  3. 应用场景
    • 数据中心:在大规模的数据中心环境中,DSR 能够显著优化跨服务器的通信效率,减少因数据包多次转发引起的延迟。
    • 云服务:对于提供云服务的平台,DSR 可以提高云内部处理的效率,特别是在处理大流量和高并发请求时。
    • 负载均衡器:结合负载均衡器的使用,DSR 可以在多个服务器之间智能分配请求,同时确保每个请求都能获得最优的响应路径。
  4. 优缺点
    • 优点
      • 减少延迟:通过跳过入口处的再次转发,直接从服务器返回响应给客户端,可以显著减少请求的响应时间。
      • 提高效率:优化了数据传输路径,使网络资源的利用率更高,从而提高整体网络效率。
      • 保持源 IP 地址:有助于进行更真实的网络监控和安全防护,因为通信的源 IP 地址不会被改变。
      • 负载均衡效果提升:可以在复杂的负载均衡场景中更高效地分配请求,避免单点过载。
    • 缺点
      • 兼容性问题:在某些特定的网络环境下(如使用 VXLAN 模式),可能无法使用 DSR。
      • 配置复杂性:尽管能带来许多好处,但 DSR 的配置和使用比传统模式更复杂,需要更多的网络知识和配置工作。
      • 受限于供应商及平台:某些公共云提供商的环境可能需要特别配置才能正常使用 DSR。
  5. 案例分析
    • Cilium DSR 模式配置:从 Cilium 1.7 版本开始,引入了基于 eBPF 的 DSR 模式,加速南北向流量的通信效率,并且能够保留客户端源 IP 特性。这种模式通过绕过不必要的网络跳转,大幅度提升了数据处理速度。
    • F5 LTM+CentOS 配置:通过对 F5 LTM(本地流量管理器)结合 CentOS 进行 DSR 配置,可以实现高效的负载均衡和网络性能优化。这种配置不仅提高了网络的吞吐能力,还增强了系统的灵活性和可扩展性。
char *ansi_color (char *str, unsigned int color, unsigned int bold);
void signal_handler(int signo);
unsigned short in_cksum(const u_short *addr, int len, u_short csum);
int send_icmp(char *host);
char *find_macaddr(char *host);
char *inet_ntoa64(struct in_addr ina);
void sniff_callback(u_char *user_arg, const struct pcap_pkthdr *pkt_header, const u_char *pkt_data);
void sniff_packet_ipmac(const u_char *pkt_data);
void sniff_packet_verbose(const u_char *pkt_data);int main(int argc, char **argv)
{
...if (argc == 1) usage(argv[0]);memset(filter_exp, 0x00, sizeof(filter_exp));while ( (opt = getopt(argc, argv, "hc:i:vnm:")) != -1 ) {switch(opt) {case 'c' :loop_counter = atoi(optarg);break;case 'i' :device = optarg;break;case 'v' :user_arg = 0x01;break;case 'n' :ansi_flag = 0;user_arg = 0x02;break;case 'm' :printf("%s's mac address is %s\n", optarg, ansi_color(find_macaddr(optarg), GREEN, UNBOLD));exit(EXIT_SUCCESS);case '?' :usage(argv[0]);default :usage(argv[0]);}if (argc > optind) {strncpy(filter_exp, argv[optind], strlen(argv[optind])+1);} else {usage(argv[0]);}}if (!filter_exp[0]) {strncpy(filter_exp, argv[1], strlen(argv[1])+1);}memset(errbuf, 0x00, sizeof(errbuf));/* 如果未在命令行上指定,请查找捕获设备 */device =  (device == NULL) ? pcap_lookupdev(errbuf) : device;if (device == NULL) {fprintf(stderr, "pcap_lookupdev : %s\n", errbuf);exit(EXIT_FAILURE);}/* 获取与捕获设备关联的网络号码和掩码 */if (pcap_lookupnet(device, &netp, &maskp, errbuf) == -1) {fprintf(stderr, "pcap_lookupnet : %s\n", errbuf);exit(EXIT_FAILURE);}p = pcap_open_live(device, SNAPLEN, PROMISC, TO_MS, errbuf);if (p == NULL) {fprintf(stderr, "pcap_open_live(): %s\n", errbuf);exit(EXIT_FAILURE);}/* 确保我们在以太网设备上进行捕获[2] */if (pcap_datalink(p) != DLT_EN10MB) {fprintf(stderr, "pcap_datalink(): %s is not an Ethernet\n", device);exit(EXIT_FAILURE);}/* 编译筛选器表达式 */if (pcap_compile(p, &fp, filter_exp, 0, netp) == -1) {fprintf(stderr, "pcap_compile(): %s: %s\n", filter_exp, pcap_geterr(p));exit(EXIT_FAILURE);}/* 应用已编译的筛选器 */if (pcap_setfilter(p, &fp) == -1) {fprintf(stderr, "pcap_setfilter():  %s: %s\n", filter_exp, pcap_geterr(p));exit(EXIT_FAILURE);}printf("# Interface: %s\n\n", device);if (!user_arg) {printf("%-43s%s\n", "SOURCE", "DESTINATION");}/* 设置回调函数 */pcap_loop(p, loop_counter, sniff_callback, &user_arg);pcap_freecode(&fp);pcap_close(p);return(EXIT_SUCCESS);
}

运行结果:




If you need the complete source code, please add the WeChat number (c17865354792)

总结

Direct Server Return (DSR) 是一项强大的网络通信优化技术,它通过减少不必要的网络跳转来显著降低延迟并提高效率。

网络嗅探器通过监听网络上的数据包并解析它们来捕获IP和MAC地址。这一过程对于网络调试、性能分析及安全监控等方面极为重要,也有助于揭示网络通信的基本工作机制。

We also undertake the development of program requirements here. If necessary, please follow the WeChat official account 【程序猿编码】and contact me

这篇关于理解什么是DSR,嗅探器视角下的IP和MAC地址识别(C/C++代码实现)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089497

相关文章

C++的模板(八):子系统

平常所见的大部分模板代码,模板所传的参数类型,到了模板里面,或实例化为对象,或嵌入模板内部结构中,或在模板内又派生了子类。不管怎样,最终他们在模板内,直接或间接,都实例化成对象了。 但这不是唯一的用法。试想一下。如果在模板内限制调用参数类型的构造函数会发生什么?参数类的对象在模板内无法构造。他们只能从模板的成员函数传入。模板不保存这些对象或者只保存他们的指针。因为构造函数被分离,这些指针在模板外

C++工程编译链接错误汇总VisualStudio

目录 一些小的知识点 make工具 可以使用windows下的事件查看器崩溃的地方 dumpbin工具查看dll是32位还是64位的 _MSC_VER .cc 和.cpp 【VC++目录中的包含目录】 vs 【C/C++常规中的附加包含目录】——头文件所在目录如何怎么添加,添加了以后搜索头文件就会到这些个路径下搜索了 include<> 和 include"" WinMain 和

uniapp接入微信小程序原生代码配置方案(优化版)

uniapp项目需要把微信小程序原生语法的功能代码嵌套过来,无需把原生代码转换为uniapp,可以配置拷贝的方式集成过来 1、拷贝代码包到src目录 2、vue.config.js中配置原生代码包直接拷贝到编译目录中 3、pages.json中配置分包目录,原生入口组件的路径 4、manifest.json中配置分包,使用原生组件 5、需要把原生代码包里的页面修改成组件的方

C/C++的编译和链接过程

目录 从源文件生成可执行文件(书中第2章) 1.Preprocessing预处理——预处理器cpp 2.Compilation编译——编译器cll ps:vs中优化选项设置 3.Assembly汇编——汇编器as ps:vs中汇编输出文件设置 4.Linking链接——链接器ld 符号 模块,库 链接过程——链接器 链接过程 1.简单链接的例子 2.链接过程 3.地址和

C++必修:模版的入门到实践

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C++学习 贝蒂的主页:Betty’s blog 1. 泛型编程 首先让我们来思考一个问题,如何实现一个交换函数? void swap(int& x, int& y){int tmp = x;x = y;y = tmp;} 相信大家很快就能写出上面这段代码,但是如果要求这个交换函数支持字符型

Mac excel 同时冻结首行和首列

1. 选择B2窗格 2. 选择视图 3. 选择冻结窗格 最后首行和首列的分割线加粗了就表示成功了

公共筛选组件(二次封装antd)支持代码提示

如果项目是基于antd组件库为基础搭建,可使用此公共筛选组件 使用到的库 npm i antdnpm i lodash-esnpm i @types/lodash-es -D /components/CommonSearch index.tsx import React from 'react';import { Button, Card, Form } from 'antd'

17.用300行代码手写初体验Spring V1.0版本

1.1.课程目标 1、了解看源码最有效的方式,先猜测后验证,不要一开始就去调试代码。 2、浓缩就是精华,用 300行最简洁的代码 提炼Spring的基本设计思想。 3、掌握Spring框架的基本脉络。 1.2.内容定位 1、 具有1年以上的SpringMVC使用经验。 2、 希望深入了解Spring源码的人群,对 Spring有一个整体的宏观感受。 3、 全程手写实现SpringM

通过SSH隧道实现通过远程服务器上外网

搭建隧道 autossh -M 0 -f -D 1080 -C -N user1@remotehost##验证隧道是否生效,查看1080端口是否启动netstat -tuln | grep 1080## 测试ssh 隧道是否生效curl -x socks5h://127.0.0.1:1080 -I http://www.github.com 将autossh 设置为服务,隧道开机启动

通过高德api查询所有店铺地址信息

通过高德api查询所有店铺地址电话信息 需求:通过高德api查询所有店铺地址信息需求分析具体实现1、申请高德appkey2、下载types city 字典值3、具体代码调用 需求:通过高德api查询所有店铺地址信息 需求分析 查询现有高德api发现现有接口关键字搜索API服务地址: https://developer.amap.com/api/webservice/gui