首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux BSP实战课(网络篇):数据包的发送过程

本文将介绍在Linux系统中,以一个UDP包的接收过程作为示例,介绍数据包是如何一步一步从应用程序到网卡并最终发送出去的。 socket层 socket(...)...构造skb结构体,最后将网卡的信息和该skb关联。...该函数最后会将找到的设备和源IP塞进flowi4结构体并返回给udp_sendmsg ip_make_skb:该函数的功能是构造skb包,构造好的skb包里面已经分配了IP包头,并且初始化了部分信息(IP...从sendto函数的帮助文件里面看到这样一句话:(Normally, this does not occur in Linux....txqueuelen: 很多地方都说这个是控制qdisc里queue的长度的,但貌似只是部分类型的qdisc用了该配置,如linux默认的pfifo_fast。

55520
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    CVE-2017-1000112-UFO 学习总结

    1.3 安装对应版本的linux内核镜像 (1)目标机上安装对应版本的linux内核镜像 下载地址:http://security.ubuntu.com/ubuntu/pool/main/l/linux.../ (2)客户机上安装对应版本的带有符号表的linux内核镜像 下载地址:http://ddebs.ubuntu.com/pool/main/l/linux/,并且源码下载,建立软链接使得调试的时候能够跟踪源码...减少Linux 内核传输层和网络层的计算工作,将这些计算工作offload(卸载)到物理网卡。UDP协议层本身不对大的数据报进行分片,而是交给IP层去做。...(5)绕过SMEP,构造一个ROP来修改CR4寄存器的第20个bit,但这需要地址泄露来保证稳定性,该exp没有泄露地址,依赖于系统版本,有待改进 (6)触发漏洞,执行payload,先构造buffer...(6)查看buffer中覆写的skb ? (7)查看rop链的入口: ? (8)由于运行版本不对,构造的rop链地址不正确导致系统崩溃,但也可以看出该漏洞可以进行拒绝服务攻击。 ?

    2.3K20

    java 构造构造方法_Java构造器(构造方法constructor)

    我们先来看一下什么是构造器: 1、构造器也叫构造方法或构造函数,分为有参构造器和无参构造器; 2、构造器也是一种方法,只不过是一种特殊的方法,它会在对象创建的时候被调用; 3、构造器最大的作用就是在创建对象的时候进行对象的初始化...,有参构造器可以实现对象传参(后面会比较着来看有参构造器方便在哪儿了); 4、一个类可以有零个(如果没有自己定义编译器会帮你提供无参构造器)或多个构造器(【重载】不知道重载定义的小伙伴可以先记下概念);...5、构造器不能被子类继承,Java中子类会自动调用父类的构造器(同样,不了解的可以先记下概念或者跳过) 前面既然说了构造器是一种特殊的方法,我们就来看一下构造方法和普通方法的区别: 1、命名:构造器的方法名必须和类名相同...2、修饰符:构造器不能被static、final、synchronized、abstract和native修饰 3、返回值:构造器没有返回值(但是不需要写void),一般方法要有返回值或者无返回值(void...) 来看一下无参构造器的代码,同时看一下无参构造器的情况下(不定义构造器同理)是如何给属性赋值的: 1 package test; public class Student01 { //定义属性 public

    1.1K10

    Linux 内核 TCP MSS 机制详细分析

    设备就好了 2.3 攻击机器 地址:192.168.11.111 日常习惯使用Python的,需要装个scapy构造自定义TCP包 自定义SYN的MSS选项 有三种方法可以设置TCP SYN包的MSS值...: tcp_skb_pcount_set(skb, DIV_ROUND_UP(skb->len, mss_now)); skb->len的最大值为17 * 32 * 1024 mss_now的最小值为8...随机进行源码审计,对发生溢出的函数tcp_set_skb_tso_segs进行回溯: tcp_set_skb_tso_segs <- tcp_fragment <- tso_fragment <- tcp_write_xmit...总结 我们来总结一下整个流程: 攻击者构造SYN包,自定义TCP头部可选参数MSS的值为48 2.靶机(受到攻击的机器)接收到SYN请求后,把SYN包中的数据保存在内存中,返回SYN,ACK包。...随后需要计算出mss_now = 48 - 50 + 20 = 18 这里假设一下该漏洞可能利用成功的场景:有一个TCP服务,自己设定了TCP可选参数,并且设置满了40字节,那么攻击者才有可能通过构造

    1.8K20

    Linux 内核 TCP MSS 机制详细分析

    攻击机器 自己日常使用的Linux设备就好了 地址:192.168.11.111 日常习惯使用Python的,需要装个scapy构造自定义TCP包 自定义SYN的MSS选项 有三种方法可以设置TCP SYN...: tcp_skb_pcount_set(skb, DIV_ROUND_UP(skb->len, mss_now)); skb->len的最大值为17 * 32 * 1024 mss_now的最小值为8...随机进行源码审计,对发生溢出的函数tcp_set_skb_tso_segs进行回溯: tcp_set_skb_tso_segs <- tcp_fragment <- tso_fragment <- tcp_write_xmit...总结 我们来总结一下整个流程: 攻击者构造SYN包,自定义TCP头部可选参数MSS的值为48 靶机(受到攻击的机器)接收到SYN请求后,把SYN包中的数据保存在内存中,返回SYN,ACK包。...随后需要计算出mss_now = 48 - 50 + 20 = 18 这里假设一下该漏洞可能利用成功的场景:有一个TCP服务,自己设定了TCP可选参数,并且设置满了40字节,那么攻击者才有可能通过构造SYN

    1.8K50

    C++ 构造函数实战指南:默认构造、带参数构造、拷贝构造与移动构造

    C++ 构造函数构造函数是 C++ 中一种特殊的成员函数,当创建类对象时自动调用。它用于初始化对象的状态,例如为属性分配初始值。构造函数与类同名,且没有返回值类型。...构造函数类型C++ 支持多种类型的构造函数,用于满足不同的初始化需求:默认构造函数: 不带参数的构造函数,通常用于初始化对象的默认状态。带参数构造函数: 允许传入参数来初始化对象的状态。...拷贝构造函数: 用于从另一个已存在的对象创建新对象。移动构造函数: 用于从即将销毁的临时对象转移资源到新对象。默认构造函数默认构造函数是最简单的构造函数,不接受任何参数。...public:构造函数可以在类外部的任何地方调用。private:构造函数只能在类的内部调用。protected:构造函数可以在类的内部或其子类中调用。...总结构造函数是 C++ 中重要的面向对象编程机制,用于初始化和管理对象的状态。通过理解不同类型的构造函数及其用法,您可以创建健壮且可维护的 C++ 代码。

    1.7K10

    Linux内核网络UDP数据包发送(三)——IP协议层分析

    前言 Linux内核网络 UDP 协议层通过调用 ip_send_skbskb 交给 IP 协议层,本文通过分析内核 IP 协议层的关键函数来分享内核数据包发送在 IP 协议层的处理,并分享了监控...可以使用它指导应用程序在发送之前,构造 UDP 数据报的大小。 如果已启用 PMTU 发现,则发送大于 PMTU 的 UDP 数据将导致应用程序收到 EMSGSIZE 错误。...以上两种情况,最后都会到 dev_queue_xmit,它将 skb 发送给 Linux 网络设备子系统,在它 进入设备驱动程序层之前将对其进行更多处理。...将头数据复制到 skb 后,skb_push 将更新 skb 内指向数据缓冲区的指针。最后调用 dev_queue_xmit 将 skb 传递给 Linux 网络设备子系统。...else goto out_kfree_skb; } 如果以太网头写入成功,将调用 dev_queue_xmit 将 skb 传递给 Linux

    3.2K21

    Docker 网络构造:Docker如何使用Linux iptables和Interfaces

    Docker广泛使用linux iptables和网桥接口,这篇文章是我如何用于创建容器网络的总结,大部分信息来自github上的讨论,演示文稿,以及我自己的测试。...Linux 网桥接口 docker创建的每个网桥网络由docker主机上的网桥接口呈现。...linux桥接接口与交换机的功能类似,因为它们将不同的接口连接到同一子网,并根据MAC地址转发流量。...Linux 虚拟网络接口(veth) 容器网络模型(CNM)允许每个容器具有其自己的网络空间。 从容器内部运行ifconfig将显示容器内部的网络接口: ?...总结 网桥网络在docker主机上具有对应的linux网桥接口,其作为layer2交换机,并且连接在同一子网上的不同容器。

    3.2K30

    CC++开发基础——拷贝构造移动构造委托构造

    对象发生复制时会调用拷贝构造函数。 如果定义一个类的时候没有定义自己的拷贝构造函数,编译器会根据需要生成一个默认的拷贝构造函数。...调用了拷贝构造函数. 调用了拷贝构造函数. 调用了拷贝构造函数. 调用了拷贝构造函数....调用了拷贝构造函数. 调用了构造函数. 调用了拷贝赋值运算符. 调用了移动构造函数. 调用了构造函数. 调用了移动赋值运算符....1.概念介绍 类的构造函数可以在初始化列表的位置调用该类的另一个构造函数,这个构造函数就叫委托构造函数,因为它把构造对象的工作委托给了另一个构造函数。...委托构造函数有助于精简函数代码。 委托构造函数对其他构造函数的调用的相关代码,不能放在委托构造函数的函数体内,必须放在构造函数的初始化列表中。

    29810

    浅析委托构造与继承构造

    随着语言的发展,C++11引入了两个强大的构造机制——委托构造(Delegating Constructors)和继承构造(Inheriting Constructors),它们均增强了代码复用,减少重复代码...C++11引入了委托构造,委托构造允许一个构造函数直接调用另一个构造函数来完成初始化工作,从而避免代码重复和提高可维护性。...继承构造(Inheriting Constructors) 当一个类继承自另一个类时,继承构造允许子类自动继承父类的构造函数,这对于保持接口一致性和简化代码非常有用。...这意味着,如果父类有一个或多个构造函数,子类可以直接使用这些构造函数而无需显式重写。...继承构造简化了派生类的定义过程,特别是当基类有复杂的构造逻辑时,避免了手动复制构造函数的繁琐工作。两者均简化了代码,提高了复用性。

    10210

    Linux用户空间与内核空间通信(Netlink通信机制)

    ) ② 用户空间可使用标准的BSD socket接口(但netlink并没有屏蔽掉协议包的构造与解析过程,推荐使用libnl等第三方库) ③ 在内核空间使用专用的内核API接口 ④ 支持多播(因此支持“...(2) skb:存放消息,它的data字段指向要发送的netlink消息结构,而 skb的控制块保存了消息的地址信息,宏NETLINK_CB(skb)就用于方便设置该控制块。...与UDP发送数据相比,Netlink多了一个消息头结构struct nlmsghdr需要我们构造。 注意代码注释中的A、B、C三处分别设置了pid。...这里首先要知道一个前提:内核不会像UDP一样根据我们设置的原、目的地址为我们构造消息头,所以我们不在包头写入我们自己的地址(pid),那内核怎么知道是谁发来的报文呢?...六:内核态程序 范例一 #include #include #include #include <linux

    4.7K10

    Linux内核网络udp数据包发送(二)——UDP协议层分析

    前言 本文分享了Linux内核网络数据包发送在UDP协议层的处理,主要分析了udp_sendmsg和udp_send_skb函数,并分享了UDP层的数据统计和监控以及socket发送队列大小的调优。...Linux 内核会使用一个数组将 TOS 转换为优先级,后者会影响数据包如何以及何时从 qdisc 中发送出去。...首先调用 flowi4_init_output 构造一个描述此 UDP 流的变量: if (rt == NULL) { struct net *net = sock_net(sk);...这个函数很复杂,它执行很多计算以确定如何构造传递给下面的网络层的 skb。 该函数的重点包括: 如果硬件支持,则处理 UDP Fragmentation Offload(UFO)。...接下来看看如何在 Linux 内核中监视和调优 UDP 协议层。 4.

    5.8K51

    C++构造函数 | 构造函数

    C++构造函数的作用 C++提供了构造函数来处理对象的初始化,构造函数是一 种特殊的成员函数,与其他成员函数不同,不需要程序员来调用它,而是在建立对象时自动执行。...构造函数的名字必须与类名同名,而不能由程序员任意命 ,以便编译系统能识别它并把它作为构造函数处理,构造函数不具有任何类型,不返回任何值,它的功能是由程序员定义,程序员根据初始化的要求设计函数体和函数参数...关于构造函数,以下5点需要读者注意:  在类对象进入其作用域时调用构造函数。 构造函数没有返回值,不需要在定义构造函数时声明类型。 构造函数不需要程序员调用,也不能被程序员调用。...如果用户自己没有定义构造函数,则C++编译系统会自动生成一个构造函数,只是这个构造函数的函数体是空的,也没有参数,不执行初始化操作。...以上,如果你看了觉得对你有所帮助,就给小林点个赞叭,这样小林也有更新下去的动力,跪谢各位父老乡亲啦~ C++构造函数 | 构造函数 更多案例可以go公众号:C语言入门到精通

    2.2K74

    绕过防火墙过滤规则传输ICMP

    Linux上使用sysctl的示例: # sysctl -a -r '^net\.ipv[46]\....由于第4层协议具有不同的语义,每个协议都有自己的提取器,但我们在包过滤器和nftables衍生物中观察到以下内容: 对于TCP,以下字段用于构造状态: 1.内部IP源和目的地; 2.内部源和目标端口;...对于UDP,以下字段用于构造状态: 1.内部IP源和目的地; 2.内部源和目标端口。 对于ICMP,以下字段用于构造状态: 1.内部IP源和目的地; 2.各种ICMP字段取决于类型。...接下来的章节将介绍Linux和OpenBSD的实现细节,以了解相关性丢失的位置。 NFTABLES实施和细节 Linux在netfilter conntrack模块中实现了相关数据包的概念。...我们将使用Linux nftables和OpenBSD Packet Filter作为防火墙来测试场景。虚拟机或真实虚拟机可用于设置环境。

    2.5K50
    领券