如何使用raw socket发送UDP报文

news/2024/10/30 11:30:35/

前面写的一篇《Linux下如何在数据链路层接收原始数据包》举了一个实例,使用raw socket接收UDP数据报,但是发送一个数据包比接收要复杂一些,本文以一个实例说明如何使用raw socket发送一个UDP报文。

1. 前言

  • 阅读本文前可以考虑先阅读一下我的另外一篇文章《Linux下如何在数据链路层接收原始数据包》,那篇文章中已经介绍过的一些概念,本文中将不再赘述;下面仅罗列一些曾经在《Linux下如何在数据链路层接收原始数据包》介绍过的技术要点;
  • 发送数据时打开raw_socket
    sock_raw = socket(AF_PACKET, SOCK_RAW, IPPROTO_RAW);
    if (sock_raw == -1)printf("error in socket");
    
  • 以太网报头结构(定义在头文件linux/if_ether.h中)
    struct ethhdr {unsigned char  h_dest[ETH_ALEN];    /* destination eth addr  */unsigned char  h_source[ETH_ALEN];  /* source ether addr  */__be16         h_proto;             /* packet type ID field  */
    } __attribute__((packed));
    
  • IP报头结构(定义在头文件linux

http://www.ppmy.cn/news/26912.html

相关文章

Java 集合基础

文章目录一、集合概念二、ArrayList1. 构造方法和添加方法2. 常用方法三、案例演示1. 存储字符串并遍历2. 存储学生对象并遍历3. 键盘录入学生对象并遍历一、集合概念 编程的时候如果要存储多个数据,使用长度固定的数组存储格式,不一定满足我们的需要&a…

【Linux】环境变量,命令行参数,main函数三个参数保姆教学

目录 ☃️1.奇奇怪怪的现象和孤儿进程 ☃️2.环境变量 ☃️3.深刻理解main函数的前两个参数和命令行参数 ☃️1.奇奇怪怪的现象和孤儿进程 首先回顾一下之前我们学过的fork()创建子进程 fork(void)的返回值有两种 注意fork()头…

FreeRTOS与UCOSIII任务状态对比

FreeRTOS任务状态 1、运行态 正在运行的任务,正在使用处理器的任务。 单核处理器中任何时候都有且只有一个任务处于运行态。 2、就绪态 已经准备就绪(非阻塞或挂起),可以立即运行但还没有运行的任务。 正在等待比自己高优先级…

设计模式浅谈

什么是设计模式 设计模式是一种软件设计的思想。是在软件开发过程中,经过验证的、用于解决在特定环境下重复出现的、特定问题的解决方案。 设计模式的设计原则 原文链接:https://blog.csdn.net/qq_43471489/article/details/124067150 设计原则 1、…

DP(2)--背包DP(0-1 背包,完全背包,多重背包)

滚动数组: 让数组滚动起来,每次都使用固定的几个存储空间,来达到压缩,节省存储空间的作用。 一般用于递推和动态规划中 一维数组 比如:求斐波那契数列第100项 long long arr[3]; arr[0] 1; arr[0] 1; for (int i 2…

【深度学习编译器系列】2. 深度学习编译器的通用设计架构

在【深度学习编译器系列】1. 为什么需要深度学习编译器?中我们了解到了为什么需要深度学习编译器,和什么是深度学习编译器,接下来我们把深度学习编译器这个小黑盒打开,看看里面有什么东西。 1. 深度学习编译器的通用设计架构 与…

05 基于STL的演讲比赛流程管理系统

文件基本上是黑马程序员的文档,部分添加自己需要的内容,仅用于自己学习!链接:黑马程序视频课程GitHub:链接 演讲比赛流程管理系统 1、 演讲比赛程序需求 1.1 比赛规则 学校举行一场演讲比赛,共有12个人参加。比赛共…

制造企业为何要上数字化工厂系统?

以目前形势来看,数字化转型是制造企业生存的关键,而数字化工厂管理系统是一个综合性、系统性的工程,波及整个企业及其供应链生态系统。数字化工厂系统所要实现的互联互通系统集成、数据信息融合和产品全生命周期集成,将方方面面的…