摘要

   本文描述了对一种对RADIUS协议进行的扩展,该扩展当前已经在部署。该扩展

   允许动态更改用户会话,像NAS产品已经实现的那样。该扩展包括断开用户连接

   和更改已经应用于用户会话的授权。

Chiba, et al.                Informational                      [Page 1]

RFC 3576       Dynamic Authorization Extensions to RADIUS      July 2003

目录

   1. 介绍 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3

       1.1. Applicability. . . . . . . . . . . . . . . . . . . . . . 3

       1.2. Requirements Language . . . . . . . . . . . . . . . . . 5

       1.3. 术语 . . . . . . . . . . . . . . . . . . . . . . . . . . 5

   2. 简介 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5

       2.1. 中断消息(DM) . . . . . . . . . . . . . . . . . . . . . 5

       2.2. 授权更改消息(CoA). . . . . . . . . . . . . . . . . . . 6

       2.3. 报文格式 . . . . .

没有win上很多现成的函数,但是命令行非常强大,所以都用popen来操作。

这次ps aux|grep 进程的时候却总是失败,换成ps ax却时好时坏,写个脚本来ps,打印输出,然后程序调用脚本,也是一样情况。

最后发现是程序里面调用命令或者是脚本,ps出来的每一行都被截断了。用--columns 200后解决。

然后这个继承fd的问题,调用了另一个程序,结果本程序结束后,另程序竟然继承了所有的fd包括监听端口,晕啊。建立子进程去启动程序,写个脚本去启动程序,情况是一样的。写个小程序再去启动脚本,也一样。

最后使用fcolseall,结果发现这个函数没用 - - 干脆在子进程里面从3到1000的fd全部close ,总算ok。

留一个xml操作学习

http://blog.csdn.net/appletreesujie/article/details/4207435

1-3章

自动补齐

$跟环境变量  ~跟用户名  @跟主机名

man命令 -f xxx 可以显示出所有xxx的文档,比如有的是c的有的是sh的。类似whatis

[root@DL01 ~]# man -f mkdir

mkdir                (1)  - make directories

mkdir                (1p)  - make directories

mkdir                (2)  - create a directory

mkdir                (3p)  - make a directory

然后可以用man 3p mkdir来看具体的

-k是搜索所有包含xxx的

[root@DL01 ~]# man -k fopen

TIFFClientOpen [TIFFOpen] (3tiff)  - open a TIFF file for reading or writing

TIFFFdOpen [TIFFOpen] (3tiff)  - open a TIFF file for reading or writing

TIFFOpen             (3tiff)  - open a TIFF file for reading or writing

fdopen [fopen]       (3)  - stream open functions

fopen                (3)  - stream open functions

fopen                (3p)  - open a stream

freopen [fopen]   &

这本书将的还是比较细的,除了最后nasl语言的不了解所以没怎么看以外,其他基本是通俗易懂。

对溢出漏洞和防御方法讲解的比较细,很容易理解,尤其介绍工具Metasploit也比较有用。不过感觉并不难对付,只要socket接受的时候不溢出就行了。

web攻击一章讲解了很多巧妙的手法,尤其是注入漏洞的问题,我估计我平时写的http程序的对外接口也有问题,如果能巧妙组织引号内容的数据,也可以实现一些操作,不过用c实现自己的http比直接的php好,直接提前读出在内存中操作就行了,不必什么都去读数据库,也更安全了。

比如输入用户名admin和密码xxx,然后去数据库查询,就是select passwd from admin where user='admin' 如果我们在输入用户名的时候用的是admin ' and min(passwd,1,1)='a' and 'a'='a 那么就可以组成一个句子select passwd from admin where user='admin‘ and min(passwd,1,1)='a' and 'a'='a ' 这样根据结果可以猜出密码的第一个字母是什么。当然之前要猜出表名和字段名,使用一些自动探测工具,比如NBSI,HDSI自动完成这类操作。

P111书里要过滤所有的mysql命令和引号百分号什么的,比如insert,exec,mid什么的,但是我觉得只要转义引号百分号这类符号就行了,不明白在转义符号后,还有什么必要去过滤mysql命令,这样还容易误判。

再想

libevent是一个事件触发的网络库,适用于windows、linux、bsd等多种平台,内部使用select、epoll、kqueue等系统调用管理事件机制。著名分布式缓存软件memcached也是libevent based,而且libevent在使用上可以做到跨平台。

libevent在linux上实现是使用epoll机制的。

平时在代码里使用的是epoll,觉得没有windows完成端口方便,需要自己去实现一些功能。

公司常用的linux自带libevent版本1.1,现在最新的版本是2.0,但是刚刚推出,头文件很多都改变了,最成熟的库是1.4。

http://monkey.org/~provos/libevent/

使用回调函数来实现自定义功能。

一个简单的网络事件

void fifo_read(int fd, short event, void *arg)

{

 struct event *ev = (struct event *)arg;

 /* 重新安排事件 */

 event_add(ev, NULL);

 /* 读socket */

 len = read(fd, buf, sizeof(buf) - 1);

}

main()

{

 ……

 /* 初始化事件 */

 event_init();

 /* 设置事件为可读,回调函数fifo_read */

 event_set(&evfifo, socket, EV_READ, fifo_read, &evfifo);

 /* 添加事件,没有超时时间 */

 event_add(&evfifo, NULL);

 /* 进入libevent主循环 */

 event_dispatch();

 ……

}

一个简单的信号处理

int called = 0;

static void signal_cb(int fd, short event, void *arg)

{

 struct event *signal = (struct e

#define MYCODE __FILE__,__LINE__,__FUNCTION__

#define MYCODE2 mycall(__FILE__,__LINE__,__FUNCTION__);

void mycall(char* file=__FILE__,int line=__LINE__,const char* function=__FUNCTION__)

{

 printf("%s:%d %s\n",file,line,function);

 printf("%s:%d %s\n",__FILE__,__LINE__,__FUNCTION__);

}

int main()

{

 mycall(__FILE__,__LINE__,__FUNCTION__);

 mycall();

 mycall(MYCODE);

 MYCODE2

 return 0;

}

打印结果:

/root/code/testexe/src/testexe.cpp:380 main

/root/code/testexe/src/testexe.cpp:375 mycall

/root/code/testexe/src/testexe.cpp:372

/root/code/testexe/src/testexe.cpp:375 mycall

/root/code/testexe/src/testexe.cpp:382 main

/root/code/testexe/src/testexe.cpp:375 mycall

/root/code/testexe/src/testexe.cpp:383 main

/root/code/testexe/src/testexe.cpp:375 mycall

可见,作为默认参数,只是函数声明的文件和行数,没有函数名。

作为宏定义的话,不是宏定义申明的位置,而是实际调用的位置。

ANSI标准说明了五个预定义的宏名。它们是:

__LINE__

__FILE__

__DATE__

__TIME__

__STDC__

C++中还定义了 __cplusplus

如果编译器不是标准的,则可能仅支持以上宏名中的几个,或根本不支持。记住编译程序也许还提供其它预定义的宏名。

__LINE__ 及 __FILE__ 宏指示,#line指令可以改变它的值,简单的讲,编译时,它们包含程序的当前行数和文件名。

__DATE__ 宏指令含有形式为月/日

前阵子写代码遇到多线程下usleep会卡死的情况。

看日志是线程卡死,于是gdb进去看,但是没有发现死锁,还是正常的停留在usleep中了,最后才发现是usleep进去后出不来了。

周末做了个实验,发现似乎跟机器有关,另外一台机器就一直没有出现这种情况。

还发现了一个情况,就是虽然usleep会卡死,但是过大概50分钟,就会从usleep中退出来。并没有出现永远卡死的情况。每次出现都是卡住50分钟后恢复,但是我的程序里面也没有50分钟的定时器。

发现有2个线程可能会卡死,都是循环中usleep(1000)的。

尝试把试着把usleep的返回值打印出来,发现是否卡死后退出,都没有返回失败。也没有任何一个usleep返回过失败。

并不所有的机器都会出现,很莫名其妙。以前线上也从来没有出现过这类问题。

很奇怪,于是群发邮件给同事,有人说make clean一把,有人不相信usleep会退步出来。

“把出问题那台机器的目标文件全部删掉,重新make一下试试;”

-------------------------

出问题的机器没有编译代码,只是把编译后的程序放上去了。2台机器运行的都是同样的执行程序。操作系统也同样。

“遇到过,但现象不一样,是卡死之后不会出来。

问题在于/usr/include/bits/typesizes.h中定义的__FD_SETSIZE和进程中定义的不一致。”

-------------------

http://www.tianya.cn/publicforum/content/news/1/195307.shtml

多年来,全国各地很多媒体都在竞相报道发现假鸡蛋的新闻,一些不甘寂寞的专家学者也纷纷上电视为民众讲解“人造鸡蛋对人体的危害”和“如何鉴别假鸡蛋”;更有教授细谈“人造鸡蛋的配方”。齐鲁晚报的记者杨飞越还在电视台现身说法:“在国内“鸡蛋造假第一人”任永兴那里卧底,学到了制作人造鸡蛋的方法”,说任永兴制造的形状逼真的假鸡蛋让山东省工商和质监部门十分震惊。还说任永兴已到山东省郓城县公安局治安大队投案自首;生怕落后的一些香港弱智媒体,也紧跟着刊登假鸡蛋泛滥内地的大篇幅报道。

炒作的速度是惊人的。在“百度”上输入“人造鸡蛋”、“技术”搜索,相关的信息竟多达20多万条,出售技术的方式分为面授和函授两种,收费从几百元到上千元。湖北一家公司宣称所出售的技术不需要专门设备,只需要一种体积很小、专门用于控制鸡蛋大小和蛋壳的生成模具即可,这种模具的成本只需几元钱,学会该公司所提供的技术后,几分钟就可制作出来。另外一家公司不仅在广告上标出了技术“转让费用”,还对人造鸡蛋发展的阶段进行了总结。称从以纯手工的无壳熟蛋为代表的第一

第六部分:系统考虑

27 程序规模对构建的影响

“如果你习惯开发小项目,那么你的第一个中大型项目就有可能失控”

“交流路径大致等于人数的平方”

“改善交流效率的常用方法是采用正式的文档”

“项目规模变成2倍,错误不止是2倍”

“规模越大,构建(详细设计,编码调试,开发者测试)的比重越小”

28 管理架构

“良好的编码习惯,最好由受人尊敬的架构师来做,而不应该由管理者来做。”

“强调代码是共有财产。”

第五部分:代码改善

25 代码调整策略

70年代,程序员意识到过分专注性能会损失程序的可读性和可维护性。

对普通用户来说,程序员按时交付软件、一个清爽的界面、避免死机,常常比性能更重要。

优化效率前先考虑几个问题:

1、程序需求(客户的需求要求太高,其实根本没有必要这么高)

2、程序的设计(当前的设计很难做良好的优化工作)

3、具体设计(比如采用快速排序还是冒泡排序)

4、同操作系统的交互(影响你的效率,有时候你自己也没有意思到有系统调用,比如编译器会生成系统调用,或者某个库使用了)

5、代码编译(好的编译器都会替你优化)

6、硬件

7、代码调整(本章主题,细节代码)

“不足4%的部分常常占用了超过50%的运行时间”

1、“代码行数多,并不代表运行速度慢”

for(int i=0;i<10;i++)

 a[i]=i;

a[0]=1;a[2]=2;……a[9]=9;

相比,明显是后面一个更快。

2、“优化要考虑可移植性,可能一种方法放到另外一种语言,甚至同一语言的另外一种编译器,都可能产生反作用。”

3、“很难找到那4%的部分,程序员做的优化往往带来的效果都微不足道。”

4、“对那4%的优化,可能顾此失彼,反而导致整体性能的下降。”

5、“速度的优化会带来可读性、封装性、正确性的破坏,