数据帧去掉VlanTag的代码(802.1Q)

这篇具有很好参考价值的文章主要介绍了数据帧去掉VlanTag的代码(802.1Q)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

可以使用如下C语言代码来判断数据包类型是否为0x8100(即802.1Q协议),如果是则去掉其中的4个字节的TAG:

#include <stdlib.h>
#include <string.h>
#include <netinet/if_ether.h>

#define VLAN_TAG_LEN 4          // 固定的802.1Q Tag长度

void strip_vlan(unsigned char *buffer, size_t buflen) {
    struct ether_header *eth = (struct ether_header *) buffer;

    if (ntohs(eth->ether_type) == ETHERTYPE_VLAN) {
        memmove(buffer + sizeof(struct ether_header),
                buffer + sizeof(struct ether_header) + VLAN_TAG_LEN,
                buflen - sizeof(struct ether_header) - VLAN_TAG_LEN);

        eth->ether_type = ntohs(*((unsigned short *)(buffer + sizeof(struct ether_header) - 2)));
    }
}

 

这个函数接受指向数据包缓冲区的指针和缓冲区长度作为输入,在原地修改缓冲区内容。具体实现方式如下:

  • 首先将以太网头的指针转换为ether_header类型;
  • 然后检查eth->ether_type字段是否等于ETHERTYPE_VLAN(即0x8100),如果是则表示该数据包有802.1Q TAG;
  • 如果存在802.1Q TAG,则将缓冲区中以太网头之后的所有字节向前移动TAG长度(4个字节),相当于去除了TAG;
  • 最后将以太网头中的类型字段更新为去掉TAG后的新类型。

需要注意的是,此函数假设输入的数据包已经包含Ethernet头部。如果要处理没有Ethernet头部的裸数据包,请在调用该函数之前添加按需添加Ethernet头部。另外,如果您只需要判断并不需要去除TAG,请直接删除strip_vlan()函数中的memmove()和最后一行代码即可文章来源地址https://www.toymoban.com/news/detail-431236.html

到了这里,关于数据帧去掉VlanTag的代码(802.1Q)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CentOS中自动加载802.1q模块

    CentOS中自动加载802.1q模块 要想在CentOS中自动加载内核模块,需要在/etc/sysconfig/modules/目录中增加一个脚本,在此脚本中加载所需的模块。 下面是我所用的一个名为8021q.modules的脚本,用来在我的CentOS 5.3中自动加载802.1Q模块: 上面的脚本首先检查8021q模块文件是否存在,如果存

    2024年02月13日
    浏览(36)
  • 802.1x协议详解,802协议工作原理/认证过程、MAB认证、EAP报文格式

    「作者主页」: 士别三日wyx 「作者简介」: CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」: 对网络安全感兴趣的小伙伴可以关注专栏《网络安全入门到精通》 在以前的IEEE802LAN协议中,只要用户可以 「接入局域网」 ,就能 「访问」

    2024年02月08日
    浏览(45)
  • 身份认证——802.1x认证和MAC认证讲解

    目录 802.1x基础 EAP(Extensible Authentication Protocol)可扩展认证协议 EAPoL(EAP over LAN)局域网可扩展认证协议 802.1x体系架构 受控端口的受控方式 802.1x认证 802.1x认证触发方式 客户端退出认证 802.1x认证方式 MAC认证 802.1x认证又称为EAPOE(Extensible Authentication Protocol Over Ethernet)认证

    2024年02月03日
    浏览(43)
  • 华为交换机802.1X和MAC认证配置

    配置802.1X接入模板“d1” [Switch]dot1x-access-profile name d1   [Switch]quit 配置认证模板“p1”,并在其上绑定802.1X接入模板“d1”、指定认证模板下用户的强制认证域为“802.1x_Mac”。 [Switch] authentication-profile name p1 [Switch-authen-profile-p1] dot1x-access-profile d1 [Switch-authen-profile-p1] access-domai

    2024年01月25日
    浏览(39)
  • 锐捷RSR系列路由器_接入路由器交换模块配置_802.1x认证配置

    目录 01  RSR10-02E、RSR20-14E-F802.1x认证配置 02  802.1X认证常见问题和故障 03  路由器重启802.1X认证失败的解决方案   功能介绍 RSR10-02E、RSR20-14E/F固化交换端口,没有登陆交换卡这种概念,也无法登陆交换卡。路由/交换的所有配置都在路由器的CLI界面完成。 一、组网需求:   

    2024年03月16日
    浏览(61)
  • brew update报如下警告,且不能安装和更新,可以这样解决

    安装软件提示: fatal: not in a git directory Error: Command failed with exit 128: git ➜  ~ brew update Warning: No remote \\\'origin\\\' in /opt/homebrew/Library/Taps/homebrew/homebrew-cask, skipping update! Warning: No remote \\\'origin\\\' in /opt/homebrew/Library/Taps/homebrew/homebrew-core, skipping update! Warning: No remote \\\'origin\\\' in /opt/homebrew/Libr

    2024年02月14日
    浏览(42)
  • java中Stream转成List类型如下写代码?

    在Java中,将Stream转换为List类型可以使用 Collectors.toList() 方法。以下是示例代码: javaCopy code import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; public class StreamToListExample { public static void main(String[] args) { StreamInteger stream = Stream.of(1, 2, 3, 4, 5); ListInteger list = str

    2024年02月12日
    浏览(58)
  • 使用Pycharm实现ssh连接并可以远程调试和运行代码

    远程连接服务器时,若想远程调试和运行代码,可以使用Pycharm中的Deployment来配置 首先需要知道服务器上的IP、端口号以及用户名,就可以通过ssh实现远程连接 最简单的方式就是通过自己电脑上的cmd或终端等直接输入命令: ssh user_name@ip -p 端口号 然后输入密码即可访问 点击

    2024年04月11日
    浏览(44)
  • 简单有趣的轻量级网络 Efficientnet(可以直接替换自己数据集)-直接放置自己的数据集就能直接跑。跑的代码有问题的可以在评论区(网络结构详解+详细注释代码+核心思想讲解)——pytorch实现

            这期博客我们来学习一下Efficientnet网络,属于NAS系列中最优秀的轻量级网络之一,通过NAS搜索的方式确定最佳的网络结构。之前的神经网络的宽度深度,输入图像的分辨率,是怎么获得的呢,说白了就是经验,研究人员通过无数的设计经验获得的,但是网络的发展不

    2024年04月26日
    浏览(44)
  • 使用 Java 8 中的 Stream ,可以让你写代码事半功倍

    Java 8 中一个主要的新功能是引入了流(Stream)功能。在 java.util.stream 中包含用于处理元素序列的类。其中,最重要的类是 StreamT 。下面我们就来看看如何使用现有的数据源创建流。 可以使用 stream() 和 of() 方法从不同的数据源(例如:集合、数组)创建流: Collection 接口新增

    2024年02月04日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包