新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
TCP协议头最少20个字节,包括以下的区域
专注于为中小企业提供成都网站建设、成都网站制作服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业乳山免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。
TCP源端口(Source Port):16位的源端口其中包含初始化通信的端口。源端口和源IP地址的作用是
标示报问的返回地址。
TCP目的端口(Destination port):16位的目的端口域定义传输的目的。这个端口指明报文接收计算
机上的应用程序地址接口。
TCP序列号(序列码,Sequence Number):32位
TCP应答号(Acknowledgment Number):32位的序列号由接收端计算机使用,重组分段的报文成最初形式。,如果设置了ACK控制位,这个值表示一个准备接收的包的序列码。
以前我用过querylist插件抓数据,服务器写和定时器,每天固定时间去运行脚本。朝这个方式试试
高并发下数据的更新,应该 update table xxx set num = num - 1 的方式,这种方式可以保证数据的正确性。
但是会出现 num 为负数的问题,如果库存为负数,显然是不合理的。
于是,需要将 num 字段设置为 无符号整型,这样就不会出现负数了,因为,如果减到负数,就会更新失败。
但是这种依然会造成很多无用的更新语句的执行,是不合理的。
于是,update table xxx set num = num - 1 where num 0,
这样当 num 等于0之后就不会去更新数据库了,减少了很多无用的开销。
这种方式被称作“乐观锁”
此外,对于抢红包这种非整数的操作,我们应该转换为整数的操作。
关于抢购超卖的控制
一般抢购功能是一个相对于正常售卖系统来说独立的子系统,这样既可以防止抢购时的高并发影响到正常系统,
也可以做到针对于抢购业务的特殊处理。
在后台设计一些功能,可以就昂正常的商品加入到抢购活动中并编辑成为抢购商品,写入到抢购商品表,当然
也可以把抢购商品表写入redis而不是数据表。并且在原商品表写入一个同样的商品(id相同,用于订单查看,
此商品不可购买)
如果是数据表,为了控制超卖,需要对表进行行锁,更新的时候带上 where goods_amount 0。
如果是redis,使用 hincrby 一个负数来减库存,并且 hincrby 会返回改变后的值,再来判断返回值是否大于0,
因为redis每个命令都是原子性的,这样不用锁表就可控制超卖。
PHP获取POST数据的几种方法:
方法1、最常见的方法是:$_POST['fieldname'];
说明:只能接收Content-Type:
application/x-www-form-urlencoded提交的数据。
方法2、file_get_contents("php://input");
说明:
允许读取
POST
的原始数据。
和
$HTTP_RAW_POST_DATA
比起来,它给内存带来的压力较小,并且不需要任何特殊的
php.ini
设置。
php://input
不能用于
enctype="multipart/form-data"。
方法3、$GLOBALS['HTTP_RAW_POST_DATA'];
说明:
总是产生
$HTTP_RAW_POST_DATA
变量包含有原始的
POST
数据。
此变量仅在碰到未识别
MIME
类型的数据时产生。
//提取XML数据源
$xmlUrl= '';
echo $xmlUrl;
$curl= curl_init();
curl_setopt($curl, CURLOPT_URL, $xmlUrl);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);
curl_setopt($curl, CURLOPT_HEADER, 0);
$xmlData= curl_exec($curl);
curl_close($curl);
//判断XML编码
if(preg_match("/encoding\=[\'\"](.*?)[\'\"]/i", $xmlData, $encoding)){
$encoding = $encoding[1];
}else{
$encoding = mb_detect_encoding($xmlData, array('ASCII', 'GBK', 'GB2312', 'UTF-8', 'iso-8859-1'));
}
echo $encoding;
//转换XML编码
if($encoding){
$xmlData = preg_replace('/encoding\=[\'\"](.*?)[\'\"]/i', 'encoding="utf-8"', $xmlData);
switch(strtolower($encoding)){
case 'utf-8': break;
case 'iso-8859-1':
$xmlData = utf8_encode($xmlData);
break;
default:
$xmlData = iconv($encoding, 'UTF-8//IGNORE', $xmlData);
break;
}
}
$xmlData= simplexml_load_string($xmlData);
print_r($xmlData);
添加相应数据库字段,下载链接以php动态的形式获取不就可以了么
tcpdump能帮助我们捕捉并保存网络包,保存下来的网络包可用于分析网络负载情况,包可通过tcpdump命令解析,也可以保存成后缀为pcap的文件,使用wireshark等软件进行查看,下面我们就来看一个tcpdump实现24小时自动抓包实现例子.
安装tcpdump,代码如下:
# yum install tcpdump
脚本里有注释#diy的,表示下一行需自定义修改,脚本都放在home目录下,crontab里写:**/6***/bin/bash/home/monitor_dump.sh
**/6***/bin/bash/home/monitor_disk.sh
根据当磁盘空间的大小和流量的大小确定crontab里的时间间隔,因加了crontab要时间到才执行,为了现在执行,可执行:nohup sh /home/monitor_dump.sh
vi常用命令:
# vi /etc/crontab
insert进入编辑状态,ESC进入命令状态:wq保存退出:q退出,修改后要执行 crontab /etc/crontab.
main_dump.sh (抓包的主程序),每隔1分钟通过死循环检测,让程序不断的去抓包,考虑到抓包的结果可能太大分析工具无法打开分析,所以每个数据包大小限制约为100M.并设定了前一个包抓完,间隔5秒,开始进行下一轮抓包.
每天的数据包放在/data下以日期命名的目录如:/data/2010-03-08,并进行压缩存储,包的命令格式为:yyyy-mm-dd@hhmmss-hhmmss.pcap.gz;其中yyyy-mm-dd表示日期,第一个hhmmss表示开始抓包的时分秒,第二个hhmmss表示抓包结束的时分秒,代码如下:#!/bin/bash
#scriptname:/home/main_dump.sh
while:
do
STIME=`date+%F"@"%H%M%S`
DATE_DIR=`date+%F`
if[!-d/data/$DATE_DIR];then
mkdir-p/data/$DATE_DIR
fi
#diy#unit:byte;100MB
MAXSIZE=100000000
#diy
DUMPPID=`ps-ef|grep"tcpdump-ieth0"|greppcap|awk'{print$2}'`
if[!"$DUMPPID"];then
#diy
/usr/sbin/tcpdump-ieth0host113.105.152.180-w/data/$DATE_DIR/$STIME.pcap-s0
fi
sleep1
#diy
DUMPPID=`ps-ef|grep"tcpdump-ieth0"|greppcap|awk'{print$2}'`
PACKSIZE=`ls-l/data/$DATE_DIR|grep"$STIME.pcap"|awk'{print$5}'`
while["$PACKSIZE"-lt"$MAXSIZE"];do
PACKSIZE=`ls-l/data/$DATE_DIR|grep"$STIME.pcap"|awk'{print$5}'`//phpfensi.com
sleep1m
done
kill-9$DUMPPID
ETIME=`date+%H%M%S`
mv/data/$DATE_DIR/$STIME.pcap/data/$DATE_DIR/$STIME-$ETIME.pcap
gzip/data/$DATE_DIR/*.pcap
sleep5
done
monitor_dump.sh(监控抓包脚本)
为了保证抓包主程序能健康运行,通过crontab程序来调度monitor_dump.sh,监控抓包主程序是事正常运行,如果没有运行,则启动它,代码如下:#!/bin/bash
#scriptname:/home/monitor_dump.sh
DATE_DIR=`date+%F`
STIME=`date+%F"@"%H%M%S`
MAINDUMP=`ps-elf|grepmaindump|grep-vgrep`
#diy
DUMPPID=`ps-ef|grep"tcpdump-ieth0"|greppcap`
#checkmainprogrammestatus
if[!"$MAINDUMP"];then
/bin/bash/home/maindump.sh
fi
if[!"$DUMPPID"];then
#diy
/usr/sbin/tcpdump-ieth0host113.105.152.180-w/data/$DATE_DIR/$STIME.pcap-s0
fi
monitor_disk.sh(监控硬盘空间)
监控磁盘的空闲空间,当磁盘的使用率大于等于30%时(可设置),会自动删除最早一天抓到的所在数据包,以保证磁盘的空闲空间,代码如下:#!/bin/bash
#scriptname:/home/monitor_disk.sh
#diy
FREEDISK=`df-h|grep"/dev/sda3"|awk'{print$5}'|awk-F%'{print$1}'`
HEADMOST=`ls-l/data|grep^d|awk'{print$NF}'|sort|head-n1`