把笔记本的网络通过无线方式共享给手机0+

54 views / 2016.09.04 / 8:08 下午

网络ssid:paddy
密码:duyipeng
运行下面两行命令即可:
netsh wlan set hostednetwork mode=allow ssid=paddy key=duyipeng
netsh wlan start hostednetwork

Categories: 分享 Tags:

The HTTP response body was malformed错误解决0+

125 views / 2016.08.01 / 3:03 下午

公司的网路环境比较负责,有个nginx服务报了个The HTTP response body was malformed错误,抓包发现返回的http信息中没有content-length信息。具体报错如下:
QQ图片20160801152319
搞来搞去,各种方法都试了不行。
最后发现是服务器硬盘满了…怪怪…
原来nginx服务无法写日志的时候,还会导致返回的http信息不完整,真是醉了。

Categories: 感悟 Tags:

验证身份证的代码0+

181 views / 2016.06.08 / 3:03 下午

身份证最后一位是根据前面十七位数字码计算出来的检验码作为尾号的校验码。

计算方法

1、将前面的身份证号码17位数分别乘以不同的系数。从第一位到第十七位的系数分别为:7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 ;

2、将这17位数字和系数相乘的结果相加;

3、用加出来和除以11,看余数是多少;

4、余数只可能有0 1 2 3 4 5 6 7 8 9 10这11个数字。其分别对应的最后一位身份证的号码为1 0 X 9 8 7 6 5 4 3 2;

5、通过上面得知如果余数是2,就会在身份证的第18位数字上出现罗马数字的X。如果余数是10,身份证的最后一位号码就是2;

例如:某男性的身份证号码是34052419800101001X。我们要看看这个身份证是不是合法的身份证。

首先:我们计算3*7+4*9+0*10+5*5+…+1*2,前17位的乘积和是189

然后:用189除以11得出的结果是商17余2

最后:通过对应规则就可以知道余数2对应的数字是x。所以,这是一个合格的身份证号码。

附上代码:

<?php
$s="371122198601097819";
$c=explode(" ","7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2");
$v=explode(" ","1 0 X 9 8 7 6 5 4 3 2");
$sum=0;
for($i=0;$i<17;$i++){
$sum+=$s[$i]*$c[$i];
}
$right = $v[$sum%11];
if($s[17]==$right){
echo "Right ID card number\n";
}else{
echo "Incorrect ID card number, the last digit number should be ".$right."\n";
}
?>

Categories: 感悟 Tags:

最近有台服务器被安全部门扫出存在java反序列化的漏洞,修复建议是:
升级Commons-Collections.jar到最新版本,官方下载地址:
http://commons.apache.org/proper/commons-collections/download_collections.cgi
注:升级后请做好相关功能测试。
检查了这个jar包后,发现这个服务器上的应用和最新版无法兼容。于是想到使用iptables把外网访问这个端口的权限给禁用掉
# Generated by iptables-save v1.4.8 on Sat Jun 15 23:23:13 2013
*filter
:INPUT ACCEPT [35:6316]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [17:1648]
-A INPUT -s 127.0.0.1/32 -p tcp -m tcp --dport 8080 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8080 -j REJECT
COMMIT
# Completed on Sat Jun 15 23:23:13 2013

iptables-resore rules.txt后

防火墙服务开机自启动
chkconfig iptables on

防火墙规则开启自启动
service iptables save
会把规则保存到/etc/sysconfig/iptables文件中,重启会自动读取

Categories: 感悟 Tags:

近日因为公司IT提供的接口返回的数据只能用windows环境去解析, 可我处所有服务器已经完成了全linux进化,所以只好找了台空闲的ubuntu server去Virtualbox一个windows 2008.
根据Oracle Virtualbox官方的统一叫法,ubuntu系统是host,而要安装的windows 2008是guest.
其中host的信息为:

Ubuntu 14.04.3 LTS (GNU/Linux 3.19.0-25-generic x86_64)

而guest的镜像信息为:

cn_windows_server_2008_r2_X64_standard_enterprise

可以看到,这两个系统都是64位的。
首先在host中为virtualbox的apt-secure配置公钥信息:

wget -q https://www.virtualbox.org/download/oracle_vbox.asc -O- | sudo apt-key add -

然后在/etc/apt/sources.list添加下列行:

deb http://download.virtualbox.org/virtualbox/debian vivid contrib

该处需要根据你系统的发行版本, 将 ‘vivid’ 替换为 ‘utopic’, ‘trusty’, ‘raring’, ‘quantal’, ‘precise’, ‘lucid’, ‘jessie’, ‘wheezy’, 或 ‘squeeze’.我的是trusty,所以添加完变为:

deb http://download.virtualbox.org/virtualbox/debian trusty contrib

然后安装virtualbox-5.0:

sudo apt-get update
sudo apt-get install virtualbox-5.0

安装完成会自动在dkms中注册virtualbox的核心模块,以保证各模块随系统自动更新。如果没有dkms,需要安装:
sudo apt-get install dkms
如果出现签名认证错误“The following signatures were invalid: BADSIG …”,需要执行下列操作:

# sudo -s -H
# apt-get clean
# rm /var/lib/apt/lists/*
# rm /var/lib/apt/lists/partial/*
# apt-get clean
# apt-get update

安装成功后,因为是server版本的ubuntu,我们需要灵活使用vboxmanage这个工具进行虚拟机创建、安装、删除等一系列操作。
切换到root用户下,保证权限足够大:
sudo su
然后在virtualboxHD目录下创建一个虚拟机所需要的硬盘,50G足够:

vboxmanage createhd --filename virtualboxHD/win2008server --size 50000

然后创建一个名字为win2008x64的guest虚拟机,这个ostype很重要,一定要选择对了,查看支持的系统类型:

VBoxManage list ostypes

创建过程:

vboxmanage createvm --name='win2008x64' --ostype='Windows2008_64' --register

然后指定guest使用的内存为1个G:

vboxmanage modifyvm "win2008x64" --memory 1024

创建硬盘控制器,并将刚创建的硬盘和镜像挂载上:

vboxmanage storagectl "win2008x64" --name "IDE Controller" --add ide --bootable on
vboxmanage storageattach "win2008x64" --storagectl "IDE Controller" --port 0 --device 0 --type hdd --medium virtualboxHD/win2008server.vdi
vboxmanage storageattach "win2008x64" --storagectl "IDE Controller" --port 1 --device 0 --type dvddrive --medium Win2008_R2_x64fre_server_eval_zh-cn-GRMSXEVAL_CN_DVD.iso

接下来指定网络类型为桥接,并指定控制guest的端口:

vboxmanage modifyvm "win2008x64" --nic1 bridged
vboxmanage modifyvm "win2008x64" --bridgeadapter1 eth0
vboxmanage modifyvm "win2008x64" --vrde on
vboxmanage modifyvm "win2008x64" --vrdeport 6000
vboxmanage modifyvm "win2008x64" --vrdeaddress 10.103.236.182

该处的vrdeaddress就是Host的ip地址。
控制guest的权限认证为自定义:

vboxmanage modifyvm "win2008x64" --vrdeauthtype external
vboxmanage modifyvm "win2008x64" --vrdeauthlibrary VBoxAuthSimple

然后生成一个密码:

vboxmanage internalcommands passwordhash "密码"

将密码配置到用户名上:

vboxmanage setextradata "win2008x64" "VBoxAuthSimple/users/用户名" "生成的密码"

然后就可以启动guest了:

vboxmanage startvm "win2008x64" --type headless

用自己PC电脑打开远程桌面(mstsc),使用刚生成用户名和密码,就可以连接到10.103.236.182:6000, 观察guest的系统安装情况。此时发现guest无法正常安装系统,错误提示:
…cpu is not compatible with 64-bit mod
回到host命令行,关闭guest:

vboxmanage controlvm "win2008server" poweroff

然后修改CPU,让它支持64位系统:

vboxmanage setextradata "win2008x64" VBoxInternal/CPUM/CMPXCHG16B 1

再启动guest,发现还是有同样的错误,查看/proc/cpuinfo的flags,发现有vmx标识,说明host的cpu是支持的虚拟化技术的,于是
到virtualbox官网查半天,发现需要将Host的bios中的虚拟化配置选项vt-x打开,没办法,去机房实体操作BIOS,打开intel virtual technology选项后,重新启动guest,系统安装成功。

接下来是配置guest的网络环境,需要关机。因为没有多余的ip,所以不能选择桥接类型了,只好改为nat。
桥接所用命令:

VBoxManage modifyvm "win2008x64" --nic1 bridged --cableconnected1 on --nictype1 82540EM --bridgeadapter1 eth0 --intnet1 brigh1 --macaddress1 auto

修改为NAT所用命令:

VBoxManage modifyvm "win2008x64" --nic1 nat

然后把3389端口映射到host

VBoxManage modifyvm "win2008x64" --natpf1 "guestrdp,tcp,,3389,,3389"

如此,就可以使用自己的PC的远程桌面,直接通过host的ip连接guest了。

至此,配置完成。

Categories: 感悟 Tags: