按照ldd的说法,linux的设备驱动包括了char,block,net三种设备。char设备是比较简单的,只要分配了major、minor号,就可以进行读写处理了。相对而言,block和net要稍微复杂些。net设备姑且按下不谈,我们在以后的博文中会有涉及。今天,我们可以看看一个简单的block是怎么设计的。
这周帮朋友用 eBPF/SystemTap 这样的动态 tracing 工具做了一些很有趣的功能。这篇文章算是一个总结
云网络发展早期,很多厂商的虚拟化网路方案基于内核模块来实现,这时的带宽通常从千兆到万兆,一般情况下还能够满足要求(SDWAN厂商华夏创新的网络加速就是在内核的PREROUTING上做的,性能还可以)。再后来,进入到25G时代了,基于内核的一些实现已经不能满足业务对网络吞吐的性能要求了,大约在2013~2018左右,很多厂商转向用DPDK实现,着实火了一段时间。到现在逐渐进入100G时代,会发现,无论大厂小厂,都逐渐开始转向智能网卡,网络特性offload到硬件,基本是当前和今后一段时间的主流。
信息安全课程——窃取密码 一、 一、 安装ubantu16-64 Desktop版本 通过XShell连接虚拟机。 sudo apt install openssh-server sudo apt-get install vim #安装vim,使用上下左右键 sudo apt-get install gcc-multilib 代码如下: //getpass.c #include <sys/types.h> #include <stdio.h> #include <stdlib.h> #include <
之前写过一篇文章 Linux下c语言中的main函数是如何被调用的,该篇文章侧重于从user space层面讲程序的运行,而文章中提到的有关kernel space层面的相关系统调用,比如fork、execve等,都被一笔带过。
上一篇博客 【Linux 内核】实时调度类 ① ( 进程分类 | 实时进程、普通进程 | Linux 内核 SCHED_FIFO、SCHED_RR 调度策略 | 实时调度实体 sched_rt_entity ) 引入了 实时调度实体 sched_rt_entity 结构体源码 , 在 Linux 内核源码的 linux-5.6.18\include\linux\sched.h 头文件中 ;
本实验窃取密码的前提是要明文传输,先必须找到一个登录页面是采用http协议(非https)的站点,一般的163邮箱都有相应的防御机制,建议使用自己学校的邮箱或门户,随意输入用户名和密码。
本文作者:sivenzhang,腾讯 IEG 测试开发工程师 1. 前言 本文主要对 Linux 系统内核协议栈中网络层接收,发送以及转发数据包的流程进行简要介绍,同时对 Netfilter 数据包过滤框架的基本原理以及使用方式进行简单阐述。 内容如有理解错误而导致说明错误的地方,还请指正。如存在引用而没有添加说明的,也请及时告知,非常感谢! 2. 基础网络知识 2.1 网络分层模型 OSI 模型中将网络划分为七层,但在目前实际广泛使用的 TCP/IP 协议框架体系内,我们一般将网络划分为五层,从
本文介绍了如何编写一个简单的驱动程序,该驱动程序可以控制硬件设备。首先介绍了驱动程序的基本结构和组成,包括驱动程序、设备、设备文件、操作系统和硬件之间的交互。然后详细讲解了驱动程序的开发过程,包括设备树、设备驱动、设备驱动的加载和运行,以及如何使用驱动程序开发工具编写驱动程序。最后,介绍了驱动程序在实际开发中的应用,包括驱动程序开发中的常见问题和解决方法,以及如何在生产环境中部署驱动程序。通过本文的学习,可以加深对驱动程序的理解,掌握驱动程序开发的基本技能,为后续的驱动程序开发工作打下坚实的基础。","summary_detail":[{"title":"本文介绍了如何编写一个简单的驱动程序,该驱动程序可以控制硬件设备。","summary":"本文介绍了如何编写一个简单的驱动程序,该驱动程序可以控制硬件设备。首先介绍了驱动程序的基本结构和组成,包括驱动程序、设备、设备文件、操作系统和硬件之间的交互。然后详细讲解了驱动程序的开发过程,包括设备树、设备驱动、设备驱动的加载和运行,以及如何使用驱动程序开发工具编写驱动程序。最后,介绍了驱动程序在实际开发中的应用,包括驱动程序开发中的常见问题和解决方法,以及如何在生产环境中部署驱动程序。通过本文的学习,可以加深对驱动程序的理解,掌握驱动程序开发的基本技能,为后续的驱动程序开发工作打下坚实的基础。
在 《漫画解说内存映射》一文中介绍过 虚拟内存 与 物理内存 映射的原理与过程,虚拟内存与物理内存进行映射的过程被称为 内存映射。内存映射是硬件(内存管理单元)级别的功能,必须按照硬件的规范设置好内存映射的关系,进程才能正常运行。
1.写出最底层Led_Open(),Led_Write(),Led_Read() 2.如何让内核知道下面有我们写好的操作硬件的函数呢?定义一个file_operations结构体(指向Led_Open等底层函数)。使用函数regsiter_chrdev(major,”first_drv”,&first_drv_fops)注册告诉内核(通过major索引)。 3.regsiter_chrdev被谁调用?被驱动入口函数调用。first_drv_init() 4.如何知道调用first_drv_init(),还是其他的函数呢?利用宏module_init(first_drv_init)定义一个结构体,结构体中有函数指针,指向入口函数。 5.出口函数first_drv_exit。卸载驱动unregsiter_chrdev(major,”first_drv”,&first_drv_fops)。如何知道何时来调用first_drv_exit?module_init(first_drv_exit)定义一个结构体,结构体中有函数指针,指向入口函数。
linux下用户程序同内核通信的方式一般有ioctl, proc文件系统,剩下一个就是Netlink套接字了。 这里先介绍下netlink。
1. NSH-SFC概述 当前SFC的实现方案主要分为两种:一种基于NSH(network service header)。数据封装时,在L2或者L3数据后添加NSH头,然后进行L3或L4的封装。转发时,根据nshheader去转发SFC中的数据,整个过程都是依据同一个SPI(service path id)和递减的SI(service index);另一种无NSH头,在转发过程中,SFF需要不停对新来的数据包进行判断,确定是否属于某个SFC。ODL的子项目SFC就是第一种的实现。 1.1 NSH-SFC组
如果想做模仿网络攻击的测试,选择高速小包发送工具,最好还是可以指定协议的。当然,我们研究这些可不是打算用来攻击他人的机器,搞网络破坏的,而是用来通过该方法测试收数据体验一下被攻击的感觉,哈哈,也顺便衡量一下机器的性能。这方面smartbit测试仪可以完全可以满足。可惜啊,一台都得好几十万,对于大多数人来说都不太划算。那么还有没有软件的发包工具可以实现高速按指定协议发送数据包啊?!有。还是要归功于linux的开源精神的许多网络黑客的无私奉献。我们可以采用linux内核自带的发包工具pktgen,或者经常被用来进行网络攻击的stream源代码。 不过目前stream.c是比较老的版本了,现在我们可以使用改进而来的stream3.c或stream3o.c来完成我们的发包任务,很不错啊,在源码里面修改for循环的次数,就可以指定发包数量。然后编译源码运行,指定自己想要的参数,就可以达到目的了。呵呵! The packet size distribution enhancement of the Linux Kernel Packet Generator: ———————————————————-
这几天在看 ipvs 相关代码的时候又遇到了 netlink 的事情,所以这两天花了点时间重新把 netlink 的事情梳理了一下。
前言: 互联网后台的服务器上,通常需要运行多达数百个进程,甚至更多。 有一天,运维兄弟突然找上门,说:xx服务器上为什么要访问yy服务(例如yy服务使用UDP的12345端口)? 开发一脸懵逼:没有呀!并不是我部署的服务访问的。。。 运维兄弟:我不管,这台机器分配给你了,你要负责,要不你抓包看看? 开发兄弟娴熟的一手tcpdump -iany -Xnnls0 udp port 12345:哎呦我去,还真有进程在访问,but,是哪个进程呢?UDP无连接,netstat是没有办法了,tcpdump只能证明有包发
Below is an example which does exactly what you need: hook received TCP packets and print their payloads. If you want to print some other information from received packet (like binary data), you just need to modify a bit the section under this comment:
问题背景 系统:Tina 平台:R818、V833 扫描笔产品 蓝牙功能:a2dp source
一种是固定的、静态的连接,就是把需要用到的库函数的目标代码(二进制)代码从程序库中抽取出来,链接进应用软件的目标映像中;
#include <sys/ioctl.h> int ioctl(int fd, unsigned long request, ...); /usr/src/linux-headers-4.10.0-35/include/uapi/linux/if.h /* * INET An implementation of the TCP/IP protocol suite for the LINUX * operating system. INET is implemented using the B
uC/os内存管理机制为内存块形式,用户申请内存是需要自己指定内存区内内存块数和内存块大小,看起来很灵活,实际上很不方便,需要使用者记住内存块大小,自己维护内存区,给使用者增加了负担。
设备总线驱动模型:http://blog.csdn.net/lizuobin2/article/details/51570196
但是在检查后发现,并没有出现include多次头文件,也只有这一个定义ELF_FILE结构体的地方
继 记一次传递文件句柄引发的血案 之后,这个 demo 又引发了一次血案,现录如下。
上一篇文章阅读量比较多,看起来网络的主题比较受欢迎。这一篇文章我们继续探索 BPF 在网络领域的应用:使用 BPF 来实现安全组。
本文介绍了按键精灵第四代的按键互斥、阻塞机制,以及如何使用这些机制来编写高效的自动化程序。
Netlink是linux提供的用于内核和用户态进程之间的通信方式。但是注意虽然Netlink主要用于用户空间和内核空间的通信,但是也能用于用户空间的两个进程通信。只是进程间通信有其他很多方式,一般不用Netlink。除非需要用到Netlink的广播特性时。
今天介绍一个可以拿出去吹牛的功能:实现socket句柄在进程之间迁移!为了这篇文章,xjjdog可算下了苦功夫,半夜还在翻资料。因为需要验证后,才能证明这项技术确实是正确的。
于是出现了对于握手过程进行的攻击。攻击者发送大量的SYN包,服务器回应(SYN+ACK)包,但是攻击者不回应ACK包,这样的话,服务器不知道(SYN+ACK)是否发送成功,默认情况下会重试5次(tcp_syn_retries)。这样的话,对于服务器的内存,带宽都有很大的消耗。攻击者如果处于公网,可以伪造IP的话,对于服务器就很难根据IP来判断攻击者,给防护带来很大的困难。
在 【Linux 内核】实时调度类 ② ( 实时调度实体 sched_rt_entity 源码分析 | run_list、timeout、watchdog_stamp、time_slice 字段 ) 博客中 , 简单介绍了 在 linux-5.6.18\include\linux\sched.h 头文件中定义的 实时调度实体 sched_rt_entity 源码 ,
文章介绍了如何利用驱动精灵软件对Windows系统进行驱动安装。主要包括驱动精灵软件的下载和安装、驱动精灵软件的使用方法、如何进行驱动备份和还原、如何进行驱动更新和优化等。同时,文章还介绍了如何使用驱动精灵软件进行声卡驱动、显卡驱动、网卡驱动等驱动程序的安装和更新。
首先要明确:uboot目标是从flash读出内核(nand read.jffs2 0x30007FC0 kernel;),启动它(bootm 0x30007FC0)。
RECV(2) Linux Programmer’s Manual RECV(2)
本节主要学习: 详细分析UBOOT中"bootcmd=nand read.jffs2 0x30007FC0 kernel;bootm 0x30007FC0" 中怎么实现bootm命令启动内核.
本文介绍了从裸机程序、操作系统和硬件抽象层三个方面分析Linux内核,并详细介绍了Linux内核的初始化过程、进程管理、内存管理、设备驱动、中断处理、性能优化等方面的知识。
根据给定的文章内容,撰写摘要总结。
左边主机,右边从机;USB 有主机控制器 UHC 和从机控制器 UDC,主机侧有 USB Device Driver,从机侧有 USB Function Driver。
http://blog.csdn.net/unbutun/article/details/3394061
在linux kernel里,有一个debug选项LOCKUP_DETECTOR。
When you are writing a linux application that needs either kernel to userspace communications or userspace to kernel communications, the typical answer is to use ioctl and sockets.
我们在写完代码后,进行简单的编译,然后在 shell 命令行下就可以把它启动起来。
This blog post explains how computers running the Linux kernel send packets, as well as how to monitor and tune each component of the networking stack as packets flow from user programs to network hardware.
在内核分析网络分组时,底层协议的数据将传输到跟高的层。而发送数据的时候顺序是相反的。每一层都是通过加(首部+净荷)传向跟底层,直至最终发送。
分类: linux 网络 2014-04-17 23:45 487人阅读 评论(0) 收藏 举报
https://github.com/nevermosby/linux-bpf-learning
今天看到有人发了CVE-2017-1000112-UFO的分析,就把之前的学习报告整理一下,做个对比学习。 别人的分析报告: https://securingtomorrow.mcafee.com/mcafee-labs/linux-kernel-vulnerability-can-lead-to-privilege-escalation-analyzing-cve-2017-1000112/
原文出自:http://blog.csdn.net/ghostyu/article/details/6908805
在前面文章《LTE模组可以被VPP直接接管喽!!!》中介绍使用af-packet插件将linux 内核接口映射到vpp中,并通过vpp dhcp client插件实现lte拨号上网的功能,本文主要介绍af packet实现机制,对阅读代码有所帮助。
ioctl用于向设备发控制和配置命令,有些命令也需要读写一些数据,但这些数据是不能用read/write读写的,称为Out-of-band数据。也就是说,read/write读写的数据是in-band数据,是I/O操作的主体,而ioctl命令传送的是控制信息,其中的数据是辅助的数据。
领取专属 10元无门槛券
手把手带您无忧上云