- 博客(84)
- 资源 (2)
- 收藏
- 关注
原创 linux内核链表提取
list.h#ifndef IF_LIST#define IF_LIST#define LIST_HEAD_INIT(x) list_head x={&x, &x}#define LIST_HEAD_INIT_STATIC(x) static LIST_HEAD_INIT(x)struct __list_head{ struct __list_head* pre
2011-06-24 02:51:00 361
原创 精通pki网络安全认证技术与编程实现(读书笔记5)
第五章 OpenSSL签名和验证 数据签名其实就是对数据的摘要进行私钥加密。验证签名就是解密签名数据,和原始的摘要是否一样。OpenSSL中签名,是先对原始数据计算摘要,再对摘要进行私钥加密。验证的过程是对原始消息计算摘要,解密签名值,和摘要对比是否一致。如果一致,说明签名有效;否则,则认为原名 或签名值被篡改。数字签名结合数字证书可以实现身份认证、防篡改、防抵赖的功能。签名的数据格式为PKCS
2011-06-22 02:11:00 464
原创 精通pki网络安全认证技术与编程实现(读书笔记4)
第三章 OpenSSL加密与解密 数据的加密就是通过一定数学变换把原始有意义的数据转化为无意义的数据。对于对称加密算法,加密和解密采用同一个密钥,大多数采用替换、置换和移位等技术对原始数据进行变换。OpenSSL实现了现代密码学常见的密码算法,主要由DES,3DES,AES,RC2,RC4等。 在OpenSSL加密和解密开发中,加密函数为EVP_EncrytInit_ex、EVP_Encryp
2011-06-22 01:16:00 557
原创 精通pki网络安全认证技术与编程实现(读书笔记2)
第二章 openssl入门 1.OpenSSL组成:包括SSL协议、密码算法库和应用程序。 (1)SSL协议 SSL协议库是在密码算法库的基础上实现的。利用该库,可以建立一个SSL通信的服务器和客户端。 (2)密码算法库:主要包括公开密钥(非对称)算法,对称加密算法、信息摘要算法、X509数字证书标准、PKCS12个人信息交换语法标准、PKCS7加密消息语法标准、OCSP在线证书状态查询协
2011-06-21 18:40:00 412
原创 精通pki网络安全认证技术与编程实现(读书笔记1)
第一章 PKI基础知识 1.1 PKI概述 1. PKI是public key infrastructure的缩写,即公开密钥基础设施,它是国际上解决开放式互联网络信息安全需求的一套体系。 2.数字证书就是网络通信中标志通信各方身份信息的一系列数据,它由一个权威机构发行,人们可以在交往中用它来识别对方身份。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。 3.数字认证原理:数
2011-06-21 15:41:00 647
原创 精通pki网络安全认证技术与编程实现(读书笔记3)
第四章 OpenSSL消息摘要 1.消息摘要:消息摘要就是把不定长的数据通过数学变化为固定长度的短数据。原始消息的任何一点改动都会使消息摘要值发生很大变化。消息摘要具有不可逆性。 2.函数:常用的函数包括EVP_MD_CTX_init、EVP_DigestInit_ex、EVP_DigestUpdate、EVP_DigestFinal_ex和EVP_Digest。其中EVP_DigestIni
2011-06-21 10:55:00 608
原创 Linux网络编程一步一步学-加密通讯协议SSL研究(转)
服务器端源代码如下: #include #include #include #include string.h>#include #include in.h>#include #include #include #include #include #include #define MAXBUF 1024/************关于本
2011-06-19 02:44:00 936 1
原创 多线程服务器的适用场合(转)
这篇文章原本是前一篇博客《多线程服务器的常用编程模型》(以下简称《常用模型》)计划中的一节,今天终于写完了。 “服务器开发”包罗万象,本文所指的“服务器开发”的含义请见《常用模型》一文,一句话形容是:跑在多核机器上的 Linux 用户态的没有用户界面的长期运行的网络应用程序。“长期运行”的意思不是指程序 7x24 不重启,而是程序不会因为无事可做而退出,它会等着下一个请求的到来。例如 wget
2011-06-18 14:07:00 653
原创 关于SO_LINGER的使用说明
SO_LINGER 此选项指定函数close对面向连接的协议如何操作(如TCP)。缺省close操作是立即返回,如果有数据残留在套接口缓冲区中则系统将试着将这些数据发送给对方。 SO_LINGER选项用来改变此缺省设置。使用如下结构: struct linger { int l_onoff; /* 0 = off, nozero = on */ int l_linger; /* ling
2011-06-17 14:54:00 474
原创 零拷贝实例(zerocopy)转
代码实例是,客户端发送给服务端所需要的文件路径名,然后服务端将文件内容零拷贝发送给客户端,然后,客户端将内容写入到本地文件。 客户端代码:zerocopyclient.cpp #include "network.h" using namespace std; int main(int argc,char *argv[]) { sockaddr_in servadd
2011-06-16 15:32:00 288
原创 linux 内核链表
list.h/* Author: linux kernel */#ifndef LIST_H#define LIST_H/* * Simple doubly linked list implementation. * * Some of the internal functions ("__xxx") are useful when * manipulati
2011-06-15 23:10:00 261
原创 Hashtable查找开源代码
Hashtable.h/* Copyright (C) 2002 Christopher Clark *//* * Copyright (c) 2002, Christopher Clark * All rights reserved. * * Redistribution and use in source and binary forms, with or with
2011-06-15 23:05:00 725
转载 select和所线程设计并发服务器的问题(转自China Linux Fans )
<br />各位好,我使用select和多线程设计一个并发服务器,实现对客户端请求的并发处理,这样设想:每当select到一个socket有数据可以读写的时候就创建一个线程进行数据处理,代码如下:<br /> <br />/ *------------------------------------------------------------------------------------------------------- * server.c *
2011-05-30 22:57:00 932
转载 字符编码笔记:ASCII,Unicode和UTF-8
<br /><br />今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。<br />结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。<br />下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。<br />1. ASCII码<br />我们知道,在计算机内部,所有的信息最终都表示为一个二进制的字符串。每一个二进制位(bi
2011-05-23 23:45:00 166
原创 解决gdb调试不进入方法的问题
<br />今天在调试libevent的sample代码的时候,遇到不能进入libevent的函数,通过在命令行输入debuginfo-install libevent-1.4.13-1.fc13.i686解决,全程需要联互联网。
2011-05-20 22:04:00 461
原创 关于SO_REUSEADDR的使用说明
<br /> 1. 可以对一个端口进行多次绑定,一般这个是不支持使用的; <br /> 2. 对于监听套接字,比较特殊。如果你定义了SO_REUSEADDR,并且让两个套接字在同一个端口上进行接听,那么对于由谁来ACCEPT,就会出现歧义。如果你定义个SO_REUSEADDR,只定义一个套接字在一个端口上进行监听,如果服务器出现意外而导致没有将这个端口释放,那么服务器重新启动后,你还可以用这个端口,因为你已经规定可以重用了,如果你没定义的话,你就会得到提示,ADDR已在使用中。
2011-01-19 10:58:00 249
原创 shell解析IP地址
<br />ifconfig | grep '[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}/.[0-9]/{1,3/}' | grep -v '127'| cut -d: -f2 | awk '{print $1}'
2011-01-12 09:27:00 400
转载 Linux操作系统上Lsof命令详解
<br />一般root用户才能执行lsof命令,普通用户可以看见/usr/sbin/lsof命令,但是普通用户执行会显示“permission denied”<br />我总结一下lsof指令的用法:<br />lsof abc.txt 显示开启文件abc.txt的进程<br />lsof -i :22 知道22端口现在运行什么程序<br />lsof -c abc 显示abc进程现在打开的文件<br />lsof -g gid 显示归属gid的进程情况<br />lsof +d
2010-09-15 13:45:00 436
转载 Linux网络编程一步一步学-HTTPS客户端程序示例
<br />源代码如下:<br /> <br />#include <stdio.h>#include <stdlib.h>#include <string.h>#include <sys/types.h>#include <sys/socket.h>#include <errno.h>#include <unistd.h>#include <netinet/in.h>#include <limits.h>#include <netdb.h>#include <arp
2010-09-01 14:06:00 1448 1
转载 HTTP协议的C语言编程实现实例
<br />大家都很熟悉HTTP协议的应用,因为每天都在网络上浏览着不少东西,也都知道是HTTP协议是相当简单的。每次用到FlashGet之类的下载软件下载网页,当用到那个“用FlashGet下载全部链接”时总觉得很神奇。<br />后来想想,其实要实现这些下载功能也并不难,只要按照HTTP协议发送request,然后对接收到的数据进行分析,如果页面上还有href之类的链接指向标志就可以进行深一层的下载了。HTTP协议目前用的最多的是1.1版本,要全面透彻地搞懂它就参考RFC2616文档吧。<b
2010-09-01 14:01:00 449
转载 Linux网络编程一步一步学-异步通讯聊天程序select
<br />什么是异步通讯?<br />就是通讯任意一方可以任意发送消息,有消息来到时会收到系统提示去接收消息。<br /><br />这里要用到select函数。使用步骤如下:<br />1、设置一个集合变量,用来存放所有要判断的句柄(file descriptors:即我们建立的每个socket、用open打开的每个文件等)<br />2、把需要判断的句柄加入到集合里<br />3、设置判断时间<br />4、开始等待,即select<br />5、如果在设定的时间内有任何句
2010-09-01 10:59:00 378
转载 Linux网络编程一步一步学-UDP编程介绍
UDP通讯服务器端源代码如下:#include #include #include #include #include #include #include #include /**********************************************************************filename: simple-udpserver.c*purpose: 基本编程步骤说明,演示了UDP编程的服务器端编程步骤*tidied by:
2010-09-01 10:17:00 234
转载 Linux网络编程一步一步学-epoll同时处理海量连接的代码(转)
<br />#include <stdio.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include <netinet/in.h>#include <sys/socket.h>#include <sys/wait.h>#include <unistd.h>#include <arpa/inet.h>#include <openssl/ssl.h>
2010-09-01 10:02:00 302
原创 Slickedit中文显示与输入[转]
以前slickedit 2007在john wall(长沙)大侠的指导下,使用fcitx能正确输入中文,并正常显示 但slickedit 2008( v13.0.2) 出来这么久,并成功破解后,还是没能正确显示汉字,更谈不是输入。 原来,必须做一些设置,才能支持中文 首先,安装scim-pinyin, 安装后 im-switch 会自动判断 scim-pinyin 比 fcitx优先级高,只启动 scim 然后,启动slickedit, Tools->Options->Keyboard->Refei
2010-08-27 06:07:00 768
原创 带外(out of band)数据
带外数据(out—of—band data),有时也称为加速数据(expedited data), 是指连接双方中的一方发生重要事情,想要迅速地通知对方。 这种通知在已经排队等待发送的任何“普通”(有时称为“带内”)数据之前发送。 带外数据设计为比普通数据有更高的优先级。 带外数据是映射到现有的连接中的,而不是在客户机和服务器间再用一个连接。
2010-08-26 18:32:00 252
原创 epoll学习笔记(转)
epoll有两种模式,Edge Triggered(简称ET) 和 Level Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生变化时才会通知,而采用LT模式类似于原来的 select/poll操作,只要还有没有处理的事件就会一直通知. 以代码来说明问题: 首先给出server的代码,需要说明的是每次accept的连接,加入可读集的时候采用的都是ET模式,而且接收缓冲区是5字节的,也就是每次只接收5字节的数据: #include #inclu
2010-08-26 16:34:00 161
原创 Linux 2.6内核中提高网络I/O性能的新方法epoll(转)
正如我昨天在“Linux下各类TCP网络服务器的实现源代码”(http://zhoulifa.bokee.com/5345930.html)一文中提到的那样,I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。 感谢chinaunix.net上朋友safedead(http://bbs.chinaunix.net/viewpro.php?uid=407631)提醒,我今天仔细研究了一下,证实了在2.6内核中的新的I/O技术epoll。 1、为什么select是
2010-08-26 08:32:00 1120
原创 Linux下各类TCP网络服务器的实现源代码(转)
Linux下各类TCP网络服务器的实现源代码 大家都知道各类网络服务器程序的编写步骤,并且都知道网络服务器就两大类:循环服务和并发服务。这里附上源代码来个小结吧。 首先,循环网络服务器编程实现的步骤是这样的: 建立socket(这里用到socket()函数及函数setsockopt()) |
2010-08-26 08:21:00 183
原创 宏定义二义性问题
#include using namespace std; #define SOR(x) (x*x) void main(){ int a,b = 3; a = SOR(b+2); cout
2010-08-25 09:55:00 881
原创 VS2008 快捷键大全
Ctrl+m+Crtr+o折叠所有大纲 Ctrl+M+Crtr+P: 停止大纲显示 Ctrl+K+Crtr+C: 注释选定内容 Ctrl+K+Crtr+U: 取消选定注释内容 Ctrl+J : 列出成员 智能感知Shift+Alt+Enter: 切换全屏编辑 Ctrl+B,T / Ctrl+K,K: 切换书签开关 Ctrl+B,N / Ctrl+K,N: 移动到下一书签 Ctrl+B,P: 移动到上一书签 Ctrl+B,C: 清除全部标签 Ctrl+I: 渐进式搜索 Ctrl+Shift
2010-08-16 23:22:00 171
原创 HTTP请求报文格式
HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII码串,各个字段的长度是不确定的。HTTP有两类报文:请求报文和响应报文。 请求报文 一个HTTP请求报文由请求行(request line)、请求头部(header)、空行和请求数据4个部分组成,下图给出了请求报文的一般格式。 (1)请求行 请求行由请求方法字段、URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔。例如,GET /index.html HTTP/1.1。
2010-08-13 07:41:00 859 1
转载 浮点数在计算机内存中的存储格式
<br />对于浮点类型的数据采用单精度类型(float)和双精度类型(double)来存储,float数据占用32bit,double数据占用 64bit,我们在声明一个变量float f = 2.25f的时候,是如何分配内存的呢?其实不论是float类型还是double类型,在计算机内存中的存储方式都是遵从IEEE的规范的,float遵从的是IEEE R32.24 ,而double 遵从的是R64.53。<br /><br />无论是单精度还是双精度,在内存存储中都分为3个部分:<br />
2010-07-29 17:58:00 390
原创 小数的二进制表示
比如说5.6<br /><br />整数部分5用2进制为101<br /><br />小数部分0.6 <br />有这样一个公式: *2 如果<1就为0,基数=基数;大于1,就为1,基数=基数-1 <br /><br />0.6*2=1.2>0 那么就为1 基数=1.2-1=0.2<br /><br />0.2*2=0.4<0 那么就为0,基数=0.4<br /><br />0.4*2=0.8<0,那么就为0,基数=0.8<br /><br />0.8*2=1.6>0 那么就为1
2010-07-29 17:10:00 2388
原创 main2.make *** 遗漏分隔符
<br /><br /> 在执行make 时出现*** missing separator. Stop<br /> <br /> 产生的原因是:格式不正确, make文件语法较严格,如下:<br /> <br /> targetList:(dependencyList)------需顶格<br /> (commandList)------前
2010-07-01 17:26:00 241
原创 e72安装软件BUG
今天在安装e72软件的时候,发现一安装软件,屏幕闪一下就退出了,搞了半天,后来试着将sd卡清了一下,剩余空间在1.2G以上,果然有效,软件就能够继续安装。汗哪!还有这种BUG
2010-06-30 01:13:00 173
原创 snprintf函数说明
int snprintf(char *restrict buf, size_t n, const char * restrict format, ...); 函数说明:最多从源串中拷贝n-1个字符到目标串中,然后再在后面加一个0。所以如果目标串的大小为n的话,将不会溢出。 函数返回值:若成功则返回存入数组的字符数,若编码出错则返回负值。 Result1(推荐的用法) 1 #include 2 #include 3 4 int main() 5 { 6 7 char str[10]
2010-06-25 10:07:00 230
原创 socket编程
int socket(int domain,int type,int protocol); (1):如果想单独处理TCP,UDP或者ICMP,可用AF_INET, 第三个参数用IPPROTO_TCP, IPPROTO_UDP等 (2):如果想对各种IP包进行处理,则用AF_PACKET/PF_PACKET,第三个参数用htons(ETH_P_IP) (3):如果想处理一切链路层上的包(IP,RARP,ARP等),则用AF_PACKET/PF_PACKET,第三个参数用 htons(ETH_P
2010-06-22 18:23:00 402
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人