利用原始套接字解决mac地址错误问题【南瑞SysKeeper-2000】

一:案例描述

一键可视顺控图像智能项目在网络部署过程中,对网络限制隔离安全性要求很高,用到正向隔离装置(南瑞SysKeeper-2000型号)。

      

图一 正向装置示意图

现场发现问题:直连网线情况下,我方系统A抓包到有数据报文,但是不进行业务处理。

二:案例分析和解决
2.1 抓包分析问题

       1.防火墙

考虑到抓包只是到了网卡,可能被防火墙拦截了

       确认已经是关闭状态的。

       2.对比测试

       利用不过正向隔离装置进行测试(直接其他电脑发送数据),抓包发现系统A收到数据了数据,并进行了业务处理。

       通过对比抓包,发现两个差别点时候链路层的目的MAC地址不一样:目的mac如果非本机,则本机的应用程序无法收到此数据。

       图2 三个窗口(左窗口为mac值;而中窗口因为目的mac错误导致应用程序无法接收到数据;右窗口目的mac正确,应用程序能够接收到数据)

     由此,推断是这正向隔离装置的目的mac地址配置错误,导致无法被应用程序接收。

       3.配置确认

百度排查此正向隔离装置---南瑞SysKeeper-2000,确实需要配置此mac地址,进一步证

了此猜测。

     项目实施过程中,南瑞厂家技术已经离开,为保证演示,需要其他方式进行规避解决处理。

2.2 解决方案----原始套接字

2.2.1 理论

       考虑到数据已经到了网卡,理论上我们可以从网卡得到数据。而我们应用程序无法得到数据是因为使用了UDP/TCP套接字,UDP/TCP套接字编程得到的只是负载数据(没有ip,mac等信息),且对方的网络报文有误(目的mac有误),导致操作系统内核过滤丢弃此数据,不转发给应用层。

       而原始套接字可以直接从链路层得到更多的数据,包括ip,mac等信息,对于的七层模型中的数据链路层+网络层+传输层。

       对于七层模型:

      

对应于模型来看:

             

       从抓包看也能对应上:

      

正常的UDP报文截图

原始套接字编程

Tcp/udp编程

读写数据内容

eth+ip+udp/tcp+data

data(本例中的220字节)

         

2.2.2 实现

伪代码实现:

  1. 开启混杂模式
    ifconfig eth0 promisc  设置混杂模式
    ifconfig eth0 -promisc 取消混杂模式

2)创建原始套接字:

//ETH_P_ALL 接收发往本机mac的所有类型ip arp rarp的数据帧, 接收从本机发出的所有类型的数据帧.

       //(混杂模式打开的情况下,会接收到非发往本地mac的数据帧 ),

int sock_raw_fd = socket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL));

3)接受数据

//获取链路层的数据帧---null 所有网卡

 int iRevNum = recvfrom(sock_raw_fd, buf, sizeof(buf),0,NULL,NULL);

4)处理数据

       eth+ip+udp/tcp+data对于的

if( 0x0800 == ntohs(ethdr->ether_type) ) 判断为IP数据包,占用14字节

       ip+udp/tcp 占用了56字节,

       剩下的就是data负载数据了。

      

从图上,可以看到从IP数据包中得到了mac信息,且data收到了8个负载数据字节。

由此,来解决现场的错误目的mac的问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习记录--参数与超参数

什么是超参数 在深度学习的神经网络图中,有一堆参数,这些参数分成了普通参数和特殊参数,其中特殊参数往往被称为超参数 超参数(hyper parameters),在某种程度上决定了普通的参数,并且是需要额外给出的 如下图 参数设定 对于超…

滴灌广袤农村——建行江门市分行多维施策惠乡村

江门是全省农业大市、海洋大市,县域面积辽阔,约占全市95%,总人口和GDP约占7成左右,为建行江门市分行服务乡村振兴提供“沃土”。建行江门市分行以新金融行动贯彻新发展理念,主动作为,以数字技术赋能乡村振兴…

202352读书笔记|踪迹——在繁星般的黄的交错里,秦淮河仿佛笼上了一团光雾

《踪迹》朱自清,因为春,匆匆,背影,疯狂入坑。学生时代,我的语文并不好,可害怕写作文了。对于文章/古文/诗都是比较浅显的学习,从未探究深意,可以说并没有学明白。是比较跳脱而表面的…

数据库sql语句查询补充

数据库sql语句查询补充 0.前言1.Like谓语2.带有Having当中的分组查询eg. 例题:错题重做: 3.内连接例题 0.前言 数据库期末复习,对自己做错的题进行知识总结和梳理 1.Like谓语 like谓语主要有两个操作 %:百分号,表示任意长度的字符串_:下划线,表示任意单个字符 like谓语的语…

2020年度NPcon-容器与微服务实践峰会 回顾

一,会议基本信息 时间:12月16日14:00-17:00 地点:上海机遇星球(上海市黄浦区南京西路389号明天广场裙楼2楼) 电梯旁边的指示牌 会场现场 出来的时候,天快黑了 二,内容回顾 由四个讲座和一个…

Python环境搭建

一、Python运行环境 PATH添加环境变量,方便添加后续工具。 后续自定义安装即可。 交互式解释器: 二、开发环境--PyCharm

79-C语言-小球降落和反弹问题

简介:一个球从100m高度处落下,每次落地后反弹回原高度一半,再落下,再反弹。问:它在第十次落地,共运动了多少米,第十次反弹又多高呢? 看代码注释即可 代码如下: #inclu…

Nat. Mach. Intell. | 通过深度神经网络联合建模多个切片来构建一个三维全生物体空间图谱

今天为大家介绍的是来自Angela Ruohao Wu 和Can Yang团队的一篇论文。空间转录组学(ST)技术正在革新探索组织空间结构的方式。目前,ST数据分析通常局限于单个二维(2D)组织切片,这限制了我们理解在三维&…

php hyperf 读取redis,存储到数据库

背景说明 小白:伟哥,java中的set是无序的,Redis中可以带顺序吗? 伟哥:可以, 不过不叫set了,叫zset。 概述 SortedSet又叫zset,它是Redis提供的特殊数据类型,是一种特殊…

CLIP 对比学习 源码理解快速学习

最快的学习方法,理清思路,找视频讲解,看源码逻辑: CLIP 源码讲解 唐宇 输入: 图像-文本成对配对的数据 训练模型的过程(自己理解): 怎么做的?:利用数据内部…

S32K一运行IDE挂掉

早上还好好的,到了下午突然间就出问题了,一Debug就挂,整个IDE动不了。 查了这个地址,也没啥问题。查下smartgit看看源代码具体改了什么,发现一大堆配置文件被动了,应该不小心打开这个pe配置,导致…

城市智能图书柜需求说明书

1. 简介 1.1 项目概括 本项目主要实现智能图书柜对图书的借出、还回、续借、查询、上下架、盘点的功能,对于读者,可以进行读者证的办理,读者信息的录入和完善。 1.2 项目背景 ​ 目前大量读者距离图书馆较远,无法方便、快捷地…

Python---多任务的介绍

1. 提问 利用现学知识能够让两个函数或者方法同时执行吗? 不能,因为之前所写的程序都是单任务的,也就是说一个函数或者方法执行完成另外一个函数或者方法才能执行,要想实现这种操作就需要使用多任务。 多任务的最大好处是充分利用CPU资源&…

《PySpark大数据分析实战》-14.云服务模式Databricks介绍基本概念

📋 博主简介 💖 作者简介:大家好,我是wux_labs。😜 热衷于各种主流技术,热爱数据科学、机器学习、云计算、人工智能。 通过了TiDB数据库专员(PCTA)、TiDB数据库专家(PCTP…

centos安装opencv并在springboot中使用

使用conda安装opencv,并在docker运行的容器中使用,这里以运行则springboot应用的容器为例 步骤一:安装 在conda中安装 # 安装依赖 conda install numpy matplotlib# 安装opencv conda install -c conda-forge opencv # 或者制定版本 conda…

记一次java for循环改造多线程的操作

背景 今天在开发质量平台时需要获取某些数据,要请求公司某个工程的OpenAPI接口A。此接口为返回通用数据的接口,且接口本身的RT都在2~3秒之间。使用该接口,需要进行两次循环获取,然后对返回数据进行处理组装&#xff0…

【NI-RIO入门】扫描模式

于NI KB摘录 所有CompactRIO设备都可以访问CompactRIO扫描引擎和LabVIEW FPGA。 CompactRIO 904x 系列是第一个引入 DAQmx 功能的产品线。 扫描引擎(IO 变量) – 主要为迁移和初始开发而设计。控制循环频率高达 1 kHz1,性能控制器上的频率更…

kill编译异常处理

当kill编译时出现如下警告 Build target Target 1 linking... *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?_LCD_SHOWCHAR?LCD1602 *** WARNING L16: UNCALLED SEGMENT, IGNORED FOR OVERLAY PROCESSSEGMENT: ?PR?_LCD_SHOWSTRING?LCD…

代码随想录第三十五天(一刷C语言)|整数拆分不同的二叉搜索树

创作目的:为了方便自己后续复习重点,以及养成写博客的习惯。 一、整数拆分 思路:参考carl文档。 1、确定dp数组以及下标的含义:分拆数字i,可以得到的最大乘积为dp[i]。 2、确定递推公式:从1遍历j&#…

Nginx location+Nginx rewrite(重写)(新版)

Nginx locationNginx rewrite(重写) Nginx locationNginx rewrite(重写)一、location1、常用的Nginx 正则表达式2、location的类型3、location 的匹配规则4、location 优先级5、location 示例说明5.1只修改网页路径5.2修改nginx配置文件和网页路径5.3一般前缀5.4正则匹配5.5前缀…