
Linux&Unix
OldJohn86
虚其心,可解天下之问;专其心,可治天下之学;静其心,可悟天下之理;恒其心,可成天下之业
Python 学习推荐:
https://tushare.pro/register?reg=252370 分享此链接
展开
-
Linux网络编程--3. 服务器和客户机的信息函数
Linux网络编程--3. 服务器和客户机的信息函数http://linuxc.51.net 作者:hoyt (2001-05-08 11:20:14)这一章我们来学习转换和网络方面的信息函数. 3.1 字节转换函数 在网络上面有着许多类型的机器,这些机器在表示数据的字节顺序是不同的, 比如i386芯片是低字节在内存地址的低端,高字节在高端,转载 2015-03-19 15:45:03 · 486 阅读 · 0 评论 -
Linux网络编程--6. 高级套接字函数
Linux网络编程--6. 高级套接字函数http://linuxc.51.net 作者:hoyt (2001-05-08 11:22:09) 在前面的几个部分里面,我们已经学会了怎么样从网络上读写信息了.前面的一些函数(read,write)是网络程序里面最基本的函数.也是最原始的通信函数.在这一章里面,我们一起来学习网络通信的高级函数.这一章我转载 2015-03-19 15:54:34 · 470 阅读 · 0 评论 -
pthread_create如何传递多个参数
pthread_create如何传递多个参数http://zhidao.baidu.com/question/315398992.html涉及多参数传递给线程的,都需要使用结构体将参数封装后,将结构体指针传给线程定义一个结构体struct mypara{ var para1;//参数1 var para2;//参数2}转载 2015-03-25 18:58:50 · 375 阅读 · 0 评论 -
Linux网络编程--4. 完整的读写函数
Linux网络编程--4. 完整的读写函数http://linuxc.51.net 作者:hoyt (2001-05-08 11:20:52)一旦我们建立了连接,我们的下一步就是进行通信了.在Linux下面把我们前面建立的通道 看成是文件描述符,这样服务器端和客户端进行通信时候,只要往文件描述符里面读写东西了. 就象我们往文件读写一样. 4转载 2015-03-19 15:49:29 · 422 阅读 · 0 评论 -
Linux网络编程:原始套接字的魔力【上】
基于原始套接字编程 在开发面向连接的TCP和面向无连接的UDP程序时,我们所关心的核心问题在于数据收发层面,数据的传输特性由TCP或UDP来保证: 也就是说,对于TCP或UDP的程序开发,焦点在Data字段,我们没法直接对TCP或UDP头部字段进行赤裸裸的修改,当然还有IP头。换句话说,我们对它们头部操作的空间非常受限,只能使用它们已经开放给我们的诸如源、目的I转载 2015-03-18 14:28:57 · 489 阅读 · 0 评论 -
Linux网络编程--5. 用户数据报发送
Linux网络编程--5. 用户数据报发送http://linuxc.51.net 作者:hoyt (2001-05-08 11:21:31) 我们前面已经学习网络程序的一个很大的部分,由这个部分的知识,我们实际上可以写出大部分的基于TCP协议的网络程序了.现在在Linux下的大部分程序都是用我们上面所学的知识来写的.我们可以去找一些源程序来参考一转载 2015-03-19 15:52:00 · 353 阅读 · 0 评论 -
原始套接字实现PING函数
注:所以文章红色字体代表需要特别注意和有问题还未解决的地方,蓝色字体表示需要注意的地方 1. 本文所介绍的程序平台开发板:arm9-mini2440虚拟机为:Red Hat Enterprise Linux 5开发板上系统内核版本:linux-2.6.32.2 2. 原始套接字概述通常情况下程序设计人员接触的网络知识限于如下两类:(1)流式套接字转载 2015-03-19 10:37:57 · 2495 阅读 · 0 评论 -
Linux网络编程--2. 初等网络函数介绍(TCP)
Linux网络编程--2. 初等网络函数介绍(TCP)http://linuxc.51.net 作者:hoyt (2001-05-08 11:19:34) Linux系统是通过提供套接字(socket)来进行网络编程的.网络程序通过socket和其它几个函数的调用,会返回一个 通讯的文件描述符,我们可以将这个描述符看成普通的文件的描述符来操作,这就是lin转载 2015-03-19 15:39:39 · 381 阅读 · 0 评论 -
Linux网络编程--7. TCP/IP协议
Linux网络编程--7. TCP/IP协议http://linuxc.51.net 作者:hoyt (2001-05-08 11:22:40) 你也许听说过TCP/IP协议,那么你知道到底什么是TCP,什么是IP吗?在这一章里面,我们一起来学习这个目前网络上用最广泛的协议. 7.1 网络传输分层 如果你考过计算机等级考试,那么转载 2015-03-19 15:56:11 · 409 阅读 · 0 评论 -
Linux网络编程--9. 服务器模型
Linux网络编程--9. 服务器模型http://linuxc.51.net 作者:hoyt (2001-05-08 11:23:59) 学习过《软件工程》吧.软件工程可是每一个程序员"必修"的课程啊.如果你没有学习过, 建议你去看一看. 在这一章里面,我们一起来从软件工程的角度学习网络编程的思想.在我们写程序之前, 我们都应该从软件工程的角度规转载 2015-03-19 16:03:53 · 344 阅读 · 0 评论 -
Linux网络编程--10. 原始套接字 --11. 后记
Linux网络编程--10. 原始套接字 --11. 后记http://linuxc.51.net 作者:hoyt (2001-05-08 11:26:09)10. 原始套接字 我们在前面已经学习过了网络程序的两种套接字(SOCK_STREAM,SOCK_DRAGM).在这一章 里面我们一起来学习另外一种套接字--原始套接字(SOCK_RAW)转载 2015-03-19 16:04:46 · 405 阅读 · 0 评论 -
Proxy源代码分析--谈谈如何学习linux网络编程
Proxy源代码分析--谈谈如何学习linux网络编程本文出自:http://www.china-pub.com 作者:李培源 (2001-08-10 12:00:00)Linux是一个可靠性非常高的操作系统,但是所有用过Linux的朋友都会感觉到,Linux和Windows这样的"傻瓜"操作系统(这里丝毫没有贬低Windows的意思,相反这转载 2015-03-19 14:58:17 · 570 阅读 · 0 评论 -
Linux网络编程--8. 套接字选项
Linux网络编程--8. 套接字选项http://linuxc.51.net 作者:hoyt (2001-05-08 11:23:24)有时候我们要控制套接字的行为(如修改缓冲区的大小),这个时候我们就要控制套接字的选项了. 8.1 getsockopt和setsockopt int getsockopt(int sockf转载 2015-03-19 16:01:22 · 427 阅读 · 0 评论 -
原始套接字与数据链路访问编程
原始套接字与数据链路访问编程IPv4数据报格式几点说明:首部长度是以32位(即4字节)为单位;16位的标识用于分片和重组;DF位(不分片);MF(还有片段);协议字段表示封装在IP报文中的上层协议,典型的有:ICMP(1)、IGMP(2)、TCP(6)、UDP(17);头部校验和只对IP头部(包括选项)计算,校验算法是标准的因特网校验和算法,即简单的16位反码求和。IP数据转载 2015-03-19 16:13:56 · 873 阅读 · 0 评论 -
用ulimit来调整最大文件描述符数量
打开的文件和socket都要占用文件描述符fd,在某些场景fd就不够用了,这时就需要用ulimit来调整当前系统的最大fd数量。ulimit 限制的是当前 shell 进程以及其派生的子进程。如果没有root权限的话,只能压低限制而不能提升。可以放在启动脚本,或者直接在shell中运行。ulimit -a 查看所有限制,以及设定参数。ulimit -n 1000000转载 2015-03-27 14:52:20 · 1873 阅读 · 0 评论 -
Driver for Atmel AT91 / AT32 Serial ports
/* * linux/drivers/char/atmel_serial.c * * Driver for Atmel AT91 / AT32 Serial ports * Copyright (C) 2003 Rick Bronson * * Based on drivers/char/serial_sa1100.c, by Deep Blue Solutions Ltd.原创 2015-03-17 13:54:08 · 852 阅读 · 0 评论 -
把iptables移植到嵌入式Linux系统
Linux下支持netfilter机制的配置工具就是iptables,它也就相当与一个应用程序,可以对netfilter进行配置(包过滤规则,NAT等等)。所以要实现netfilter(iptables)就要从两方面来着手:1)内核支持netfilter;2)用户层的iptables配置命令。 1、编译内核,支持netfilter 在宿主机上进入Linux内核目录,配置所需的内核模块:原创 2015-03-17 13:50:17 · 3237 阅读 · 0 评论 -
linux md5sum 的用法(转)
MD5算法常常被用来验证网络文件传输的完整性,防止文件被人篡改。MD5全称是报文摘要算法(Message-Digest Algorithm 5),此算法对任意长度的信息逐位进行计算,产生一个二进制长度为128位(十六进制长度就是32位)的“指纹”(或称“报文摘要”),不同的文件产生相 同的报文摘要的可能性是非常非常之小的。 在linux或Unix上,md5sum是用来计算和校验文件报文摘要的工具程转载 2015-03-10 09:57:45 · 645 阅读 · 0 评论 -
pthread线程的终止退出 | 线程的大量创建
今天测试自己写的多线程的程序,按实际情况说,应该创建3000多个线程才对,但是,创建到378个的时候,就出错来,pthread_create()失败,刚开始以为这是个例外,所以,又重新启动,甚至跑到另一台电脑上测试。 ps:请原谅我的无知,谢谢。。。。 后来,问题根本不再这里,我从网上搜索资料,原来是有限制的,所以,从中找到一篇比较好的博文,特意转在这里,转载 2015-03-30 15:28:08 · 612 阅读 · 0 评论 -
C语言实现的linux下ls命令
用C语言实现linux下的ls -l命令。与文件相关的结构体、函数等等知识请看"stat结构体以及文件相关函数"[cpp] view plaincopy#include #include #include #include #include #include转载 2015-03-30 10:43:34 · 2210 阅读 · 0 评论 -
详解 Too many open files
运行在Linux系统上的Java程序可能会出现"Too many open files"的异常情况,且常见于高并发访问文件系统,多线程网络连接等场景。 程序经常访问的文件、socket在Linux中都是文件file,系统需要记录每个当前访问file的name、location、access authority等相关信息,这样的一个实体被称为file entry。“o转载 2015-03-30 10:57:39 · 360 阅读 · 0 评论 -
原始套接字接收是多了4个字节,是怎么回事?
rt 两个一样的开发板,一个发送,一个接收,不管哪边发哪边接,接收方都会多四个字节,正好多在二层数据帧协议出,不知道如何解决,以下是源代码://send.c#include #include //perror#include //strcpy,memset#include //socket#include转载 2015-03-23 14:40:07 · 784 阅读 · 0 评论 -
Linux网络编程:原始套接字的魔力【下】
可以接收链路层MAC帧的原始套接字 前面我们介绍过了通过原始套接字socket(AF_INET, SOCK_RAW, protocol)我们可以直接实现自行构造整个IP报文,然后对其收发。提醒一点,在用这种方式构造原始IP报文时,第三个参数protocol不能用IPPROTO_IP,这样会让系统疑惑,不知道该用什么协议来伺候你了。 今天我们介绍原始套接字的另一种用法转载 2015-03-18 15:11:31 · 517 阅读 · 0 评论 -
读取linux下的网络设备的mac地址与发送原始数据包
[html] view plaincopyroot@dlrc-desktop:/home/dlrc/dlsp-ep9302/work/mystar-v0.4# cat /proc/net/dev Inter-| Receive | Transmit face |bytes packets errs drop fifo frame com转载 2015-03-23 18:19:36 · 3452 阅读 · 0 评论 -
Linux下使用RAW SOCKET原始套接字构造UDP原始数据帧广播到局域网,在局域网的另一台计算机上显示UDP发送的信息
因为使用IEC61850需要直接访问以太网数据链路层,因此需要做一些访问数据链路层的准备工作。计划使用Linux C构造UDP原始帧在局域网内广播消息,并在另一台电脑上使用QT程序接收和显示这个广播消息。网上关于使用RAW SOCKET构造原始帧的资料很少,在外国的一个网站上找到了一份源码,经过改造后可以再局域网内广播UDP了。 在此之前遇到了很多问题,在此总结:(1)使用wiresh转载 2015-03-23 16:16:40 · 1574 阅读 · 0 评论 -
Linux环境下网络编程杂谈
今天我们说说“Pre-网络编程”。内容比较杂,但都是在做网络应用程序开发过程中经常要遇到的问题。一、大端、小端和网络字节序小端字节序:little-endian,将低字节存放在内存的起始地址;大端字节序:big-endian,将高字节存放在内存的其实地址。 例如,数字index=0x11223344,在大小端字节序方式下其存储形式为:上图一目了然的转载 2015-03-18 14:13:48 · 407 阅读 · 0 评论 -
Linux网络编程:基于TCP的程序开发回顾篇
http://blog.chinaunix.net/uid-23069658-id-3273673.html面向连接的TCP程序设计 基于TCP的程序开发分为服务器端和客户端两部分,常见的核心步骤和流程: 其实按照上面这个流程调用系统API确实可以完全实现应用层程序的开发,一点问题没有。可随着时间的推移,你会觉得这样子的开发毫无激情。为什么TCP转载 2015-03-18 14:26:57 · 307 阅读 · 0 评论 -
Linux网络编程:基于UDP的程序开发回顾篇
http://blog.chinaunix.net/uid-23069658-id-3276167.html基于无连接的UDP程序设计 同样,在开发基于UDP的应用程序时,其主要流程如下: 对于面向无连接的UDP应用程序在开发过程中服务端和客户端的操作流程基本差不多。对比面向连接的TCP程序,服务端少了listen和accept函数。前面转载 2015-03-18 14:26:44 · 317 阅读 · 0 评论 -
(七)洞悉linux下的Netfilter&iptables:如何理解连接跟踪机制?【下】
连接跟踪系统的初始化流程分析 有了前面的知识,我们再分析连接跟踪系统的初始化ip_conntrack_standalone_init()函数就太容易不过了。还是先上ip_conntrack_standalone_init()函数的流程图:该函数的核心上图已经标出来了“初始化连接跟踪系统”和“注册连接跟踪的hook函数”。其他两块这里简单做个普及,不展开讲。至少让大家明白连接跟转载 2015-03-18 16:58:04 · 422 阅读 · 0 评论 -
揭开网络编程常见API的面纱【上】
Linux网络编程API函数初步剖析 今天我们来分析一下前几篇博文中提到的网络编程中几个核心的API,探究一下当我们调用每个API时,内核中具体做了哪些准备和初始化工作。 1、socket(family,type,protocol) 当我们在开发网络应用程序时,使用该系统调用来创建一个套接字。该API所做的工作如下所示: 该系转载 2015-03-18 15:30:39 · 394 阅读 · 0 评论 -
(一)洞悉linux下的Netfilter&iptables:什么是Netfilter?
http://blog.chinaunix.net/uid-23069658-id-3160506.html 本人研究linux的防火墙系统也有一段时间了,由于近来涉及到的工作比较纷杂,久而久之怕生熟了。趁有时间,好好把这方面的东西总结一番。一来是给自己做个沉淀,二来也欢迎这方面比较牛的前辈给小弟予以指点,共同学习,共同进步。 能在CU上混的人绝非等闲之辈。因此,小转载 2015-03-18 15:51:38 · 626 阅读 · 0 评论 -
(十)洞悉linux下的Netfilter&iptables:网络地址转换原理之SNAT
源地址转换:SNAT SNAT主要应用于下列场景: 这种情况下,我们只有一个公网地址A,而又有三台主机需要同时上网,这时就需要SNAT了。它的主要作用是将那些由私网发来的数据包skb的源地址改成防火墙的公网地址A,这是因为目的主机在响应源地址为私网地址的数据包时,私网地址不能在网络上路由的缘故。 SNAT仅可以在LOCAL_OUT和POSTROUTING点转载 2015-03-18 17:01:05 · 504 阅读 · 0 评论 -
(十四)洞悉linux下的Netfilter&iptables:开发一个match模块【实战】
自己开发一个match模块 今天我们来写一个很简单的match来和大家分享如何为iptables开发扩展功能模块。这个模块是根据IP报文中有效载荷字段的长度来对其进行匹配,支持固定包大小,也支持一个区间范围的的数据包,在用户空间的用法是: iptables -A FORWARD -m pktsize --size XX[:YY] -j DROP转载 2015-03-18 17:16:43 · 592 阅读 · 0 评论 -
(四)洞悉linux下的Netfilter&iptables:包过滤子系统iptable_filter
今天我们讨论一下防火墙的数据包过滤模块iptable_filter的设计原理及其实现方式。 内核中将filter模块被组织成了一个独立的模块,每个这样独立的模块中都有个类似的init()初始化函数。编写完该函数后,用module_init()宏调用初始化函数;同样当模块被卸载时调用module_exit()宏将该模块卸载掉,该宏主要调用模块的“析构”函数。这当中就牵扯到内核ko模块的一些转载 2015-03-18 16:51:47 · 437 阅读 · 0 评论 -
(六)洞悉linux下的Netfilter&iptables:如何理解连接跟踪机制?【中】
Netfilter连接跟踪的详细流程 上一篇我们了解了连接跟踪的基本框架和大概流程,本篇我们着重分析一下,数据包在连接跟踪系统里的旅程,以达到对连接跟踪运行原理深入理解的目的。 连接跟踪机制在Netfilter框架里所注册的hook函数一共就五个:ip_conntrack_defrag()、ip_conntrack_in()、ip_conntrack_local()、ip_转载 2015-03-18 16:57:01 · 485 阅读 · 0 评论 -
(九)洞悉linux下的Netfilter&iptables:网络地址转换原理之DNAT
网络地址转换:NAT Netfitler为NAT在内核中维护了一张名为nat的表,用来处理所有和地址映射相关的操作。诸如filter、nat、mangle抑或raw这些在用户空间所认为的“表”的概念,在内核中有的是以模块的形式存在,如filter;有的是以子系统方式存在的,如nat,但它们都具有“表”的性质。因此,内核在处理它们时有很大一部操作都是相同的,例如表的初始化数据、表的注转载 2015-03-18 17:00:14 · 728 阅读 · 0 评论 -
揭开网络编程常见API的面纱【下】
Linux网络编程数据收发的API流程分析 只要把数据在协议栈中的流动线路和脉络弄清楚了,关于协议栈的实现部分,理解起来就轻松多了。在网络编程章节的数据接收过程中,我们主要介绍过read()、recv()、recvfrom()还有一个recvmsg()没介绍到,今天我们就来看一下这几个API函数到底有什么差别。数据接收 在接收数据的过程,主要分两转载 2015-03-18 15:30:40 · 389 阅读 · 0 评论 -
(十三)洞悉linux下的Netfilter&iptables:为防火墙增添功能模块【实战】
为netfilter/iptables增添新功能模块:ipp2p 一个防火墙功能模块包含两部分:内核空间的ko模块和用户空间的so模块。如下: 而且文件的命令都非常有讲究。例如我们有个模块名叫AAA,那么内核中该模块的文件名一般为ipt_AAA.c和ipt_AAA.h;对应的用户空间模块叫libipt_AAA.c。今天我通过简单的向防火墙添加ipp2p扩展功能模块的例子转载 2015-03-18 17:15:45 · 569 阅读 · 0 评论 -
(八)洞悉linux下的Netfilter&iptables:状态防火墙
基于连接跟踪机制的状态防火墙的设计与实现连接跟踪本身并没有实现什么具体功能,它为状态防火墙和NAT提供了基础框架。前面几章节我们也看到:从连接跟踪的职责来看,它只是完成了数据包从“个性”到“共性”抽象的约定,即它的核心工作是如何针对不同协议报文而定义一个通用的“连接”的概念出来,具体的实现由不同协议自身根据其报文特殊性的实际情况来提供。那么连接跟踪的主要工作其实可以总结为:入口处,收到一个转载 2015-03-18 16:57:42 · 529 阅读 · 0 评论 -
(十一)洞悉linux下的Netfilter&iptables:iptables命令行工具源码解析【上】
预备知识:part1: 初见getopt_long() 在分析iptables源码时,作为命令解析的核心函数getopt_long()不得不提。随便百度或google搜索关于该函数的介绍有很多例子和解释,这里我只举一例,目的是让大家了解传递给iptables命令的每个参数是如何被正确识别并处理的。getopt_long(int argc,char * const argv[],转载 2015-03-18 17:03:12 · 2018 阅读 · 1 评论