理解什么是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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32949.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

动手学深度学习(Pytorch版)代码实践 -卷积神经网络-29残差网络ResNet

29残差网络ResNet import torch from torch import nn from torch.nn import functional as F import liliPytorch as lp import matplotlib.pyplot as plt# 定义一个继承自nn.Module的残差块类 class Residual(nn.Module):def __init__(self, input_channels, num_chan…

技术性屏蔽百度爬虫已经一周了!

很久前明月就发现百度爬虫只抓取、只收录就是不给流量了,加上百度搜索体验越来越差,反正明月已经很久没有用过百度搜索,目前使用的浏览器几乎默认搜索都已经修改成其他搜索引擎了,真要搜索什么,一般都是必应谷歌结合着…

uni-CMS:全端开源内容管理系统的技术探索

摘要 本文介绍了uni-CMS,一个基于uniCloud开发的开源内容管理系统(CMS)。该系统旨在帮助开发者快速搭建并管理内容丰富的网站、小程序和移动应用。通过其全端渲染、内容安全检测、广告解锁付费内容以及AI生成文章等特性,uni-CMS不…

cesium 添加 Echarts 饼图

cesium 添加 Echarts 饼图 1、实现思路 1、首先创建echarts饼图,拿到创建好的canvas 2、用echarts里面生成的canvas添加到cesium billboard中 2、示例代码 <!DOCTYPE html> <html lang="en"><head><

微信小程序毕业设计-在线厨艺平台系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

微软搁置水下数据中心项目——项目纳蒂克相比陆地服务器故障更少

“我的团队努力了&#xff0c;并且成功了&#xff0c;”COI负责人诺埃尔沃尔什说。 微软已悄然终止了始于2013年的水下数据中心&#xff08;UDC&#xff09;项目“纳蒂克”。该公司向DatacenterDynamics确认了这一消息&#xff0c;微软云运营与创新部门负责人诺埃尔沃尔什表示…

STM32 Customer BootLoader 刷新项目 (二) 方案介绍

STM32 Customer BootLoader 刷新项目 (二) 方案介绍 文章目录 STM32 Customer BootLoader 刷新项目 (二) 方案介绍1. 需求分析2. STM32 Memery介绍3. BootLoader方案介绍4. 支持指令 1. 需求分析 首先在开始编程之前&#xff0c;我们先详细设计一下BootLoder的方案。 本项目做…

openjudge_2.5基本算法之搜索_917:Knight Moves

题目 917:Knight Moves 总时间限制: 1000ms 内存限制: 65536kB 描述 Background Mr Somurolov, fabulous chess-gamer indeed, asserts that no one else but him can move knights from one position to another so fast. Can you beat him? The Problem Your task is to wr…

python3GUI--ktv点歌软件By:PyQt5(附下载地址)

文章目录 一&#xff0e;前言二&#xff0e;展示1.启动2.搜索2.服务1.首页2.天气预报3.酒水饮料4.酒水饮料2 3.服务4.灯光5.调音6.排行榜7.分类点歌9.歌手点歌10.歌手个人页 三&#xff0e;心得体会1.关于代码2.关于设计3.关于打包 四&#xff0e;总结 文件大小&#xff1a;33.…

绘制口罩maskTheFace数据源是300w_lp

官网下载mask the face 代码&#xff0c;增加代码draw_face.py import argparse import cv2 import scipy.io from tqdm import tqdm from utils.aux_functions_2 import *# 设置命令行输入参数 parser argparse.ArgumentParser(description"MaskTheFace - Python code…

JavaScript之类(1)

class基础语法结构&#xff1a; 代码&#xff1a; class MyClass {constructor() { ... }method1() { ... }method2() { ... }method3() { ... }... } 解释&#xff1a; 属性解释class是我们定义的类型(类)MyClass是我们定义的类的名称 constructor()我们可以在其中初始化对象m…

微软Edge浏览器全解析

微软Edge浏览器全解析(一) 解决浏览器的主页被篡改后无法通过浏览器的自带设置来恢复的问题 相信各位都有发现新买的联想电脑浏览器的主页设置不太满意,但从浏览器自带的设置上又无法解决此问题,网上找了许多方法都无济于事,特别对有着强迫症的小伙伴们更是一种煎熬。 通…

CVE-2023-50563(sql延时注入)

简介 SEMCMS是一套支持多种语言的外贸网站内容管理系统&#xff08;CMS&#xff09;。SEMCMS v4.8版本存在SQLI&#xff0c;该漏洞源于SEMCMS_Function.php 中的 AID 参数包含 SQL 注入 过程 打开靶场 目录扫描&#xff0c;发现安装install目录&#xff0c;进入&#xff0c;…

免费一年SSL证书申请——建议收藏

免费一年SSL证书申请——建议收藏 获取免费一年期SSL证书其实挺简单的 准备你的网站&#xff1a; 确保你的网站已经有了域名&#xff0c;而且这个域名已经指向你的服务器。还要检查你的服务器支持HTTPS&#xff0c;也就是443端口要打开&#xff0c;这是HTTPS默认用的。 验证域…

开源技术:在线教育系统源码及教育培训APP开发指南

本篇文章&#xff0c;小编将探讨如何利用开源技术开发在线教育系统及教育培训APP&#xff0c;旨在为有志于此的开发者提供全面的指导和实践建议。 一、在线教育系统的基本构架 1.1架构设计 包括前端、后端和数据库三个主要部分。 1.2前端技术 在前端开发中&#xff0c;HTML…

[实践篇]13.29 再来聊下Pass Through设备透传

写在前面 为什么要再聊天Pass Through? 因为在QNX + Linux Android的技术方案下,我们会遇到LA发生reboot或异常panic后,无法正常开机。而再次异常的原因确实最头疼的Memory Corruption。观察下来是由于一些DMA外设如使用UART的一些设备在重启或panic后,没有正常走Shutdow…

使用Inno Setup 5.5制作软件安装包-精品(二)

上一篇 使用Inno Setup 6制作软件安装包&#xff08;一&#xff09;-CSDN博客 文章简单的说了一下使用Inno Setup 6制作软件安装包&#xff0c;具体有很多的细节&#xff0c;都可以参考上篇的案例。本节说一下&#xff0c;Inno Setup 5 增强版制作软件精品安装包&#xff0c;…

如何搭建饥荒服务器

《饥荒》是由Klei Entertainment开发的一款动作冒险类求生游戏&#xff0c;于2013年4月23日在PC上发行&#xff0c;2015年7月9日在iOS发布口袋版。游戏讲述的是关于一名科学家被恶魔传送到了一个神秘的世界&#xff0c;玩家将在这个异世界生存并逃出这个异世界的故事。《饥荒》…

力扣SQL50 销售分析III having + 条件计数

Problem: 1084. 销售分析III &#x1f468;‍&#x1f3eb; 参考题解 Code select s.product_id,p.product_name from sales s left join product p on s.product_id p.product_id group by product_id having count(if(sale_date between 2019-01-01 and 2019-03-31,1,nu…

【SpringBoot Actuator】⭐️Actuator 依赖实现服务健康检查,线程信息收集

目录 &#x1f378;前言 &#x1f37b;一、Actuator 了解 &#x1f37a;二、使用 2.1 依赖引入 2.2 测试场景搭建 &#x1f379;三、测试 3.1 项目启动测试 3.2 服务健康检查 3.3 线程转储 3.4 内存使用&#xff0c;垃圾回收信息获取 &#x1f49e;️四、章末 &#x1…