![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Linux
文章平均质量分 84
dolphin98629
这个作者很懒,什么都没留下…
展开
-
Linux网络编程:原始套接字 SOCK_RAW, IPV6 rawsocket
https://stackoverflow.com/questions/31419727/how-to-send-modified-ipv6-packet-through-raw-socket比较新的内核才支持 1234567 socket(fd, SOCK_RAW, IPPROTO_UDP); // 指定 TCP/UDP/ICMPint val = 1;ret = setsockopt(test->state.sockfd, IPPROTO转载 2021-06-04 15:19:55 · 2024 阅读 · 1 评论 -
ANSI 控制码
转载:之前一直好奇如何在终端输出不同颜色的文本以及如何任意改变终端光标的位置,今天才知道原来用到了 ANSI 控制码。参考资料:维基百科 Ubuntu手册控制字符控制字符,即 ASCII 控制码。ASCII 码小于 32 的字符都是控制字符。在 ASCII 中常用的控制字符包括:名称 含义 ASCII 码 键盘映射 作用 BEL bell 0x07 Ctrl+G 铃声 BS backspace 0x08 Ctr转载 2020-10-12 09:57:16 · 2684 阅读 · 0 评论 -
mysql 5.0.18 编译安装过程
一、安装 # groupadd mysql# useradd mysql -g mysql# tar -zxvf mysql-5.0.18.tar.gz# cd mysql-5.0.18# ./configure --prefix=/usr/local/mysql--prefix=/usr/local/mysql5 //*指定安装目录 --without-debug转载 2009-05-19 16:33:00 · 699 阅读 · 0 评论 -
内存字节对齐详解
一、什么是对齐,以及为什么要对齐:1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。2. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址转载 2009-05-21 10:49:00 · 608 阅读 · 0 评论 -
深入Linux内核网络堆栈
前一段时间看到这篇帖子,确实很经典,于是翻出了英文原版再读,顺便再翻译出来供大家学习,这篇文章的中文版也早都有了,不过出于完全理解的目的,我还是将它翻译了出来,加进了自己的代码,虽然在上一周的翻译过程中,我尽量保留文章的原汁原味,但错误肯定在所难免,在末尾附上原文和我自己调试通过的代码,已经够构运行,大家可以参考一下!(有错误之处请指出)深入Linux内核网络堆栈作者:bioforge alker转载 2009-05-21 16:59:00 · 744 阅读 · 0 评论 -
Hacking the Linux Kernel Network Stack
Table of Contents1 - Introduction 1.1 - What this document is 1.2 - What this document is not2 - The various Netfilter hooks and their uses 2.1 - The Linux kernels handling of packets 2.2 - The N转载 2009-05-21 17:05:00 · 867 阅读 · 0 评论 -
字节序与字节对齐
处理器间通过消息(对于C/C++而言就是定义的结构体)进行通信时需要注意字节对齐以及字节序的问题。1、字节对齐1.1字节对齐某些处理器不允许16位和32位的数据在内存中任意排放。例如,Motorola 68000 处理器不允许16位的字存放在奇地址,否则会触发异常。通常32位的处理器通过总线访问(包括读和写)内存数据。每个总线访问周期可以访问32位内存数据。内存数据是以8位的字节为转载 2009-05-21 10:42:00 · 653 阅读 · 0 评论 -
Configure,Makefile.am, Makefile.in, Makefile文件之间关系
Configure,Makefile.am, Makefile.in, Makefile文件之间关系2009-08-12 12:141.autoscan (autoconf): 扫描源代码以搜寻普通的可移植性问题,比如检查编译器,库,头文件等,生成文件configure.scan,它是configure.ac的一个雏形。 your sourc转载 2009-11-16 14:15:00 · 3933 阅读 · 1 评论 -
共享库
4.1. 编译、链接、运行组成共享库的目标文件和一般的目标文件有所不同,在编译时要加-fPIC选项,例如:$ gcc -c -fPIC stack/stack.c stack/push.c stack/pop.c stack/is_empty.c-f后面跟一些编译选项,PIC是其中一种,表示生成位置无关代码(Position Independent Code)。那么用-fPIC生成的目转载 2010-01-14 11:32:00 · 970 阅读 · 0 评论 -
Linux网卡驱动程序分析
学习应该是一个先把问题简单化,再把问题复杂化的过程。一开始就着手处理复杂的问题,难免让人有心惊胆颤,捉襟见肘的感觉。读Linux网卡驱动 也是一样。那长长的源码夹杂着那些我们陌生的变量和符号,望而生畏便是理所当然的了。不要担心,事情总有解决的办法,先把一些我们管不着的代码切割出去,留下必须的部分,把框架掌握了,那其他的事情自然就水到渠成了,这是笔者的心得。 一般在使用的Linux网转载 2010-01-14 11:52:00 · 924 阅读 · 0 评论 -
静态库
有时候需要把一组代码编译成一个库,这个库在很多项目中都要用到,例如libc就是这样一个库,我们在不同的程序中都会用到libc中的库函数(例如printf),也会用到libc中的变量(例如以后要讲到的environ变量)。本节介绍怎么创建这样一个库。我们继续用stack.c的例子。为了便于理解,我们把stack.c拆成四个程序文件(虽然实际上没太大必要),把main.c改得简单一些,头文件s转载 2010-01-14 11:12:00 · 770 阅读 · 0 评论 -
linux socket的select函数例子
使用select函数可以以非阻塞的方式和多个socket通信。程序只是演示select函数的使用,功能非常简单,即使某个连接关闭以后也不会修改当前连接数,连接数达到最大值后会终止程序。1. 程序使用了一个数组fd_A,通信开始后把需要通信的多个socket描述符都放入此数组。2. 首先生成一个叫sock_fd的socket描述符,用于监听端口。3. 将sock_fd和数组fd_A中不为转载 2010-03-11 09:30:00 · 464 阅读 · 0 评论 -
详解Linux内核之双向循环链表(转)
摘要: 本文详解了内核中面向对象的list结构的原理,以及如何以list为内嵌对象来构造自己的链表结构,如何从内嵌list对象获得自定义的对象指针;探讨了各种宏或者函数的详细使用方法及怎样以通用list结构来操作自定义对象。关键字:双向循环链表,list,list_entry,typeof,containerof,list_for_each,list_for_each_entry1、双循环链表传统转载 2009-12-31 16:13:00 · 1145 阅读 · 0 评论 -
Unix下常用CVS命令整理
Unix下常用CVS命令整理1.登录:$export CVSROOT=:pserver:username@the_server_name:/home/cvsroot Note:pserver是访问方式,如果服务器设置的是口令认证,则是 pserver。 username是 CVS服务器的用户名,可以根据你的设置修改; the_server_name是CVS服务器的名转载 2010-04-28 11:47:00 · 425 阅读 · 0 评论 -
CVS使用手册
CVS是一个C/S系统,多个开发人员通过一个中心版本控制系统来记录文件版本,从而达到保证文件同步的目的。工作模式如下: CVS服务器(文件版本库) / | / (版 本 同 步) / | /开发者1 开发者2 开发者3作为一般开发人员挑选2,6看就可以了,CVS的管理员则更需要懂的更多一些,最后还简转载 2010-04-28 12:07:00 · 409 阅读 · 0 评论 -
Linux下通用线程池的创建与使用 C++
本文给出了一个通用的线程池框架,该框架将与线程执行相关的任务进行了高层次的抽象,使之与具体的执行任务无关。另外该线程池具有动态伸缩性,它能根据执行任务的轻重自动调整线程池中线程的数量。文章的最后,我们给出一个简单示例程序,通过该示例程序,我们会发现,通过该线程池框架执行多线程任务是多么的简单。 为什么需要线程池目前的大多数网络服务器,包括Web服务器、Email服务器以及数据库服务器等转载 2010-05-11 11:13:00 · 794 阅读 · 0 评论 -
Linux C 实现线程池
最近做的一些工作需要用到线程池技术,因此参考了一些资料和书籍,如《0bug c/c++商用工程之道》。为此在linux平台上用纯c写了一个线程池的实现。 在此列出了原代码。 主要用到的数据结构有 1.struct thread_pool_t // thread pool 的实现代码2.struct thread_pool_token_t //在thread原创 2010-05-26 18:20:00 · 1012 阅读 · 0 评论 -
__attribute__详解
__attribute__的使用转载 2010-08-04 16:59:00 · 621 阅读 · 0 评论 -
C++函数调用方式(_stdcall, _pascal, _cdecl...)总结
C++函数调用方式(_stdcall, _pascal, _cdecl...)总结转载 2010-08-04 17:02:00 · 467 阅读 · 0 评论 -
使用rsync进行backup
使用rsync进行backup原创 2010-06-18 10:30:00 · 680 阅读 · 0 评论 -
linux 笔记
个人的linux笔记原创 2010-06-24 09:33:00 · 733 阅读 · 0 评论 -
反汇编代码分析--函数调用
C++反汇编代码分析--函数调用代码如下:#include "stdlib.h"int sum(int a,int b,int m,int n){ return a+b;}void main(){ int result = sum(1,2,3,4); system("pause");} 有四个参数的sum函数,接着在main方法中调用sum函数。在debug环境下,单步调试如下:11: void main()12: {00401060 push ebp;保存ebp,执行这句之前,转载 2010-12-01 14:16:00 · 7040 阅读 · 2 评论 -
Linux vlan configuration
Linux vlan configuration vconfig转载 2010-12-21 16:01:00 · 2073 阅读 · 0 评论 -
Linux vlan configuration
Linux vlan configuration vconfig转载 2010-12-21 16:01:00 · 955 阅读 · 0 评论 -
sk_buff完全注释(skbuff.c)
/* * sk_buff 完全注释 * 金伟注释 blog -- http://jinweidavid.cublog.cn 转载请注明 *//* * 本文件取自linux 2.6.13内核的skbuff.c *//* * Routines having to do with the 'struct sk_buff' memory handlers. *转载 2013-11-19 12:27:54 · 2387 阅读 · 0 评论 -
不同情况下构造skb数据包的实现
在我这个网络接口的程序中(can0),其实难点就是怎样组包。怎样在原来数据包的基础加上自己的数据,怎样构造ip头,怎样构造udp头。调试了两个星期,终于是调通了,在这个过程中,通过看内核源代码和自己组包的尝试,大概对组包的方法有了些了解,记录在此,留做备忘,也希望能给需要这方面信息的朋友一点帮助吧。1,正常网卡收到数据包后的情况:她的工作就是剥离mac头,然后给一些字段赋值,最后调用n转载 2013-11-19 12:29:18 · 1175 阅读 · 0 评论 -
drop cache
总有很多朋友对于Linux的内存管理有疑问,之前一篇[转]理解Linux的性能日志似乎也没能清除大家的疑虑。而在新版核心中,似乎对这个问题提供了新的解决方法,特转出来给大家参考一下。最后,还附上我对这方法的意见,欢迎各位一同讨论。 当在Linux下频繁存取文件后,物理内存会很快被用光,当程序结束后,内存不会被正常释放,而是一直作为caching。这个问题,貌似有不少人在问,不过都没转载 2013-11-06 12:28:32 · 1518 阅读 · 0 评论 -
ip-xfrm - transform configuration
IP-XFRM(8) Linux IP-XFRM(8)NAME ip-xfrm - transform configurationSYNOPSIS ip [ OPTIONS ] xfrm { COMMAND | help } ip xfrm X转载 2013-11-08 16:24:05 · 2639 阅读 · 0 评论 -
警惕UNIX下的LD_PRELOAD环境变量
所产生的问题由来已久。不过,在这里,我还是想讨论一下这个环境变量。因为这个环境变量所带来的安全问题非常严重,值得所有的Unix环境变量之前,请让我先说明一下程序的链接。所谓链接,也就是说编译器找到程序中所引用的函数或全局变量所存在的位置。一般来说,程序的链接分为静态链接和动态链接,静态链接就是把所有所引用到的函数或变量全部地编译到可执行文件中。动态链接则不会把函数编译到可执行文件中,而是在程序运行转载 2013-11-28 13:42:29 · 648 阅读 · 0 评论 -
C++ Memory Leak Finder
Introduction In this article I will discuss a way to build a memory leak detection program for C and C++ applications.This is not an attempt at writing a fully fledged leak detector but rathe转载 2013-12-02 12:36:28 · 1284 阅读 · 0 评论 -
Linux如何做到将外来数据包DNAT到Loopback
前面写了篇文章《使用iptables为何不能将外部进入的包NAT到127.0.0.1》,牵扯到了很多知识,最终的结论就是不能那么做。这个结论让人有些不舒服,说了半天就是阐述它为何做不到,如果我非要将包NAT到loopback呢。比如为了不将端口以及地址暴露给外部,我就是想让代理服务侦听127.0.0.1这个地址,有没有什么办法做到呢? 因为你用的是Linux,答案无疑是肯定的,所转载 2013-12-14 17:17:47 · 826 阅读 · 0 评论 -
网络虚拟化技术: TUN/TAP MACVLAN MACVTAP
TUN 设备TUN 设备是一种虚拟网络设备,通过此设备,程序可以方便得模拟网络行为。先来看看物理设备是如何工作的:所有物理网卡收到的包会交给内核的 Network Stack 处理,然后通过 Socket API 通知给用户程序。下面看看 TUN 的工作方式:普通的网卡通过网线收发数据包,但是 TUN 设备通过一个文件收发数据包。所有对这个文件的写操作会通过 TUN转载 2013-12-17 14:07:37 · 1639 阅读 · 0 评论 -
虚拟网卡 TUN/TAP 驱动程序设计原理
简介虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装。本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路。tun/tap驱动程序实现了虚拟网卡的功能,tun表示虚拟的是点对点设备,tap表示虚拟的是以太网设备,这两种设备针对网络包实施不同的封装。利用tun/tap驱动转载 2013-12-17 14:11:05 · 737 阅读 · 0 评论 -
内核网络子系统的实现
1 内核中分层模型的实现 由于内核网络子系统处理大量特定于协议的细节和微妙地方,只有分层[每层功能单一]并通过层层之间的大量的标准化的函数指针这种架构方式实现,才能尽可能的简洁高效,但也使得代码路径变得不不清晰自顶向下分层:用户空间 应用程序+c标准库内核应用层 struct socket[面向用户]转载 2014-01-01 10:17:40 · 722 阅读 · 0 评论 -
Linux内核中的IPSEC实现(6)
Java代码 8. 安全协议 与IPSEC相关的安全协议是AH(51)和ESP(50), IPSEC使用这两个协议对普通数据包进行封装, AH只认证不加密, ESP既加密又认证, 当ESP和AH同时使用时, 一般都是先进行ESP封装, 再进行AH封装, 因为AH是对整个IP包进行验证的, 而ESP只验证负载部分. 在IPV4下的AH和ESP的协议实现在转载 2013-12-31 13:46:14 · 1459 阅读 · 0 评论 -
Linux内核中的IPSEC实现(7)
9. IPSEC封装流程 IPSEC 数据包的封装过程是在数据包发出前完成的, 是和路由选择密切相关的, 根据前面的发出分析可知封装是通过对数据设置安全路由链表来实现的, 因此对数据包的IPSEC封装流程可以简单描述如下: 1) 对于进入的数据包, 进行路由选择, 如果是转发的, 进入路由输入, 然后查找安全策略检查是否需要IPSEC封装, 如果需要封装, 就查找和创建相关的安全路由, 进入路由输转载 2013-12-31 13:48:14 · 1804 阅读 · 0 评论 -
Linux内核中的IPSEC实现(4)
Java代码 6. XFRM的其他操作 6.1 HASH处理 关于HASH值的计算方法主要在net/xfrm/xfrm_hash.h中定义: // IPV4地址HASH static inline unsigned int __xfrm4_addr_hash(xfrm_address_t *addr) { // 就是地址本身转载 2013-12-31 13:40:09 · 1531 阅读 · 0 评论 -
Linux内核中的IPSEC实现(3)
Java代码 5. 安全策略(xfrm_policy)处理 本节所介绍的函数都在net/xfrm/xfrm_policy.c中定义。 5.1 策略分配 策略分配函数为xfrm_policy_alloc(), 该函数被pfkey_spdadd()函数调用 struct xfrm_policy *xfrm_policy_allo转载 2013-12-31 13:42:43 · 1592 阅读 · 0 评论 -
Linux内核中的IPSEC实现(5)
Java代码 7. IPV4下的xfrm支持处理 在xfrm中各种和地址相关的操作是和协议族相关的, 因此这部分的具体实现就放在相关的协议族实现中, 然后通过状态和策略信息结构来指引到实际的操作中,完成对普通数据包的IPSEC包装或对IPSEC包的解封装。 7.1 IPV4下的xfrm策略 IPV4下的xfrm策略在net/ipv4/xf转载 2013-12-31 13:45:12 · 1610 阅读 · 0 评论 -
主机到网络层的内核实现-1 [内核为分组接收:NAPI框架和传统框架]
本文探讨3点: 硬件抽象视图[由各种网卡驱动程序提供的、由网络实现代码使用的接口] 主机到网络层-->network层 network层 -->主机到网络层0 网络信息流:-A驱动程序 --A 硬件 B特定硬件[以太网适配器] -- B特定硬件驱动程序 -- 通用网络设备结构 -- 内核IP层-注:内核提供两个驱动程序框架(isa-skeleton.c和pc转载 2014-01-01 10:19:24 · 1078 阅读 · 0 评论