<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>潘文斌个人博客</title>
	<atom:link href="http://www.panwenbin.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.panwenbin.com</link>
	<description>记忆不行，只能记录</description>
	<lastBuildDate>Tue, 10 Jan 2012 11:49:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>redsn0w_win_0.9.10b3下载，ios5.0.1完美越狱</title>
		<link>http://www.panwenbin.com/2011/12/29/redsn0w_win_0-9-10b1%e4%b8%8b%e8%bd%bd%ef%bc%8cios5-0-1%e5%ae%8c%e7%be%8e%e8%b6%8a%e7%8b%b1/</link>
		<comments>http://www.panwenbin.com/2011/12/29/redsn0w_win_0-9-10b1%e4%b8%8b%e8%bd%bd%ef%bc%8cios5-0-1%e5%ae%8c%e7%be%8e%e8%b6%8a%e7%8b%b1/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 19:57:18 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[软件]]></category>

		<guid isPermaLink="false">http://www.panwenbin.com/?p=1998</guid>
		<description><![CDATA[做个分享下载吧，原站点国内访问不了，redsn0w_win_0.9.10b1下载，ios5.0.1完美越狱 redsn0w_win_0.9.10b3]]></description>
			<content:encoded><![CDATA[<p>做个分享下载吧，原站点国内访问不了，redsn0w_win_0.9.10b1下载，ios5.0.1完美越狱<br />
<a href='http://www.panwenbin.com/wp-content/uploads/2011/12/redsn0w_win_0.9.10b3.zip'>redsn0w_win_0.9.10b3</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.panwenbin.com/2011/12/29/redsn0w_win_0-9-10b1%e4%b8%8b%e8%bd%bd%ef%bc%8cios5-0-1%e5%ae%8c%e7%be%8e%e8%b6%8a%e7%8b%b1/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>非常有用的TC限速例子</title>
		<link>http://www.panwenbin.com/2011/12/28/%e9%9d%9e%e5%b8%b8%e6%9c%89%e7%94%a8%e7%9a%84tc%e9%99%90%e9%80%9f%e4%be%8b%e5%ad%90/</link>
		<comments>http://www.panwenbin.com/2011/12/28/%e9%9d%9e%e5%b8%b8%e6%9c%89%e7%94%a8%e7%9a%84tc%e9%99%90%e9%80%9f%e4%be%8b%e5%ad%90/#comments</comments>
		<pubDate>Wed, 28 Dec 2011 15:34:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[BASH]]></category>

		<guid isPermaLink="false">http://www.panwenbin.com/?p=1996</guid>
		<description><![CDATA[#!/bin/bash DEV=&#34;tun0&#34; UPLINK=300 #下行downlink 3200 k 大概一半左右,以便能够得到更多的并发连接 DOWNLINK=2048 VIP1=&#34;192.168.1.159/32&#34; VIP2=&#34;192.168.1.163/32&#34; ##两个vip用户 &#160; echo &#34;==================== Packetfilter and Traffic Control 流量控制 By 网络技术部 Ver. 1.0====================&#34; &#160; start_routing() { echo -n &#34;队列设置开始start......&#34; #tc qdisc del dev $DEV root &#62;null 2&#38;&#62;1 #删除原来的队列 &#160; #1.增加一个根队列，没有进行分类的数据包都走这个1:24是缺省类: tc qdisc add dev $DEV root handle 1: htb default 24 #1.1增加一个根队下面主干类1: 速率为$UPLINK k tc [...]]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">#!/bin/bash
DEV=&quot;tun0&quot;
UPLINK=300
#下行downlink 3200 k 大概一半左右,以便能够得到更多的并发连接
DOWNLINK=2048
VIP1=&quot;192.168.1.159/32&quot;
VIP2=&quot;192.168.1.163/32&quot;
##两个vip用户
&nbsp;
echo &quot;==================== Packetfilter and Traffic Control 流量控制 By 网络技术部 Ver. 1.0====================&quot;
&nbsp;
start_routing() {
        echo -n &quot;队列设置开始start......&quot;
        #tc qdisc del dev $DEV root &gt;null 2&amp;&gt;1
        #删除原来的队列
&nbsp;
        #1.增加一个根队列，没有进行分类的数据包都走这个1:24是缺省类:
        tc qdisc add dev $DEV root handle 1: htb default 24
        #1.1增加一个根队下面主干类1: 速率为$UPLINK k
        tc class add dev $DEV parent 1: classid 1:1 htb rate ${UPLINK}kbit ceil ${UPLINK}kbit prio 0
&nbsp;
        #1.1.1 在主干类1下建立第一叶子类,这是一个最高优先权的类.需要高优先和高速的包走这条通道,比如SYN,ACK,ICMP等
        tc class add dev $DEV parent 1:1 classid 1:11 htb rate $[$UPLINK]kbit ceil ${UPLINK}kbit prio 1
        #1.1.2 在主类1下建立第二叶子类 ,这是一个次高优先权的类。比如我们重要的crm数据.
        tc class add dev $DEV parent 1:1 classid 1:12 htb rate $[$UPLINK-150]kbit ceil ${UPLINK-50}kbit prio 2
&nbsp;
        #1.2 在根类下建立次干类 classid 1:2 。此次干类的下面全部优先权低于主干类,以防重要数据堵塞.
        tc class add dev $DEV parent 1: classid 1:2 htb rate $[$UPLINK-150]kbit prio 3
&nbsp;
        #1.2.1 在次干类下建立第一叶子类,可以跑例如http,pop等.
        tc class add dev $DEV parent 1:2 classid 1:21 htb rate 100kbit ceil $[$UPLINK-150]kbit prio 4
&nbsp;
        #1.2.2 在次干类下建立第二叶子类。不要太高的速度,以防发大的附件大量占用带宽,例如smtp等
        tc class add dev $DEV parent 1:2 classid 1:22 htb rate 30kbit ceil $[$UPLINK-160]kbit prio 5
&nbsp;
        #1.2.3 在次干类下建立第三叶子类。不要太多的带宽,以防大量的数据堵塞网络,例如ftp-data等,
        tc class add dev $DEV parent 1:2 classid 1:23 htb rate 15kbit ceil $[$UPLINK-170]kbit prio 6
&nbsp;
        #1.2.4 在次干类下建立第四叶子类。无所谓的数据通道,无需要太多的带宽,以防无所谓的人在阻碍正务.
        tc class add dev $DEV parent 1:2 classid 1:24 htb rate 5kbit ceil $[$UPLINK-250]kbit prio 7
&nbsp;
        #1.3 在主干类1下建立第三叶子类，给VIP用户（尽量不限速）
        tc class add dev $DEV parent 1: classid 1:3 htb rate $[$UPLINK+1000]kbit prio 3
&nbsp;
        #在每个类下面再附加上另一个队列规定,随机公平队列(SFQ)，不被某个连接不停占用带宽,以保证带宽的平均公平使用：
        #SFQ(Stochastic Fairness Queueing，随机公平队列),SFQ的关键词是“会话”(或称作“流”) ，
        #主要针对一个TCP会话或者UDP流。流量被分成相当多数量的FIFO队列中，每个队列对应一个会话。
        #数据按照简单轮转的方式发送, 每个会话都按顺序得到发送机会。这种方式非常公平，保证了每一
        #个会话都不会没其它会话所淹没。SFQ之所以被称为“随机”，是因为它并不是真的为每一个会话创建
        #一个队列，而是使用一个散列算法，把所有的会话映射到有限的几个队列中去。
        #参数perturb是多少秒后重新配置一次散列算法。默认为10
        tc qdisc add dev $DEV parent 1:11 handle 111: sfq perturb 5
        tc qdisc add dev $DEV parent 1:12 handle 112: sfq perturb 5
        tc qdisc add dev $DEV parent 1:3 handle 13: sfq perturb 5
        tc qdisc add dev $DEV parent 1:21 handle 121: sfq perturb 10
        tc qdisc add dev $DEV parent 1:22 handle 122: sfq perturb 10
        tc qdisc add dev $DEV parent 1:23 handle 133: sfq perturb 10
        tc qdisc add dev $DEV parent 1:24 handle 124: sfq perturb 10
        echo &quot;队列设置成功.done.&quot;
        echo -n &quot;设置包过滤 Setting up Filters......&quot;
        #这里设置过滤器,handle 是iptables作mark的值,让被iptables 在mangle链做了mark的不同的值选择不同的通
        #道classid,而prio 是过滤器的优先级别.
        tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 1 fw classid 1:11
        tc filter add dev $DEV parent 1:0 protocol ip prio 2 handle 2 fw classid 1:12
        tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:21
        tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:3
        tc filter add dev $DEV parent 1:0 protocol ip prio 4 handle 4 fw classid 1:22
        tc filter add dev $DEV parent 1:0 protocol ip prio 5 handle 5 fw classid 1:23
        tc filter add dev $DEV parent 1:0 protocol ip prio 6 handle 6 fw classid 1:24
        echo &quot;设置过滤器成功.done.&quot;
&nbsp;
&nbsp;
&nbsp;
########## downlink ##########################################################################
#6. 下行的限制:
#设置入队的规则,是因为把一些经常会造成下载大文件的端口进行控制,不让它们来得太快,导致堵塞.来得太快
#的就直接drop,就不会浪费和占用机器时间和力量去处理了.
#(1). 把下行速率控制在大概1000-1500k左右,因为这个速度已经足够用了,以便能够得到更多的并发下载连接
&nbsp;
tc qdisc add dev $DEV handle ffff: ingress
&nbsp;
tc filter add dev $DEV parent ffff: protocol ip prio 50 handle 8 fw police rate ${DOWNLINK}kbit burst 10k drop flowid :8
&nbsp;
&nbsp;
##vip 通道，给特殊ip较高的优先级和较大的下载速度
tc filter add dev $DEV parent ffff: protocol ip prio 3 u32 match ip dst $VIP1 police rate 2000kbit burst 10k drop flowid :1
tc filter add dev $DEV parent ffff: protocol ip prio 3 u32 match ip dst $VIP2 police rate 2000kbit burst 10k drop flowid :1
&nbsp;
#(2).如果内部网数据流不是很疯狂的话,就不用做下载的限制了,用#符号屏蔽上面两行即可.
#(3).如果要对任何进来数据的数据进行限速的话,可以用下面这句:
tc filter add dev $DEV parent ffff: protocol ip prio 10 u32 match ip src 0.0.0.0/0 police rate ${DOWNLINK}kbit burst 10k drop flowid :1
}
###############################################################################################
#7. 开始给数据包打标记，往PREROUTING链中添加mangle规则：
start_mangle() {
&nbsp;
        echo -n &quot;开始给数据包打标记......start mangle mark......&quot;
&nbsp;
iptables -F -t mangle
iptables -X -t mangle
iptables -Z -t mangle
&nbsp;
#(1)把出去的不同类数据包(为dport)给mark上标记1--6.让它走不同的通道
#(2)把进来的数据包(为sport)给mark上标记8,让它受到下行的限制,以免速度太过快而影响全局.
#(3)每条规则下根着return的意思是可以通过RETURN方法避免遍历所有的规则,加快了处理速度
&nbsp;
##设置vip
&nbsp;
&nbsp;
##设置TOS的处理：
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Delay -j RETURN
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -m tos --tos Minimize-Cost -j RETURN
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j MARK --set-mark 5
iptables -t mangle -A PREROUTING -m tos --tos Maximize-Throughput -j RETURN
&nbsp;
##提高tcp初始连接(也就是带有SYN的数据包)的优先权是非常明智的：
iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN
&nbsp;
######icmp,想ping有良好的反应,放在第一类吧.
iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p icmp -j RETURN
&nbsp;
# small packets (probably just ACKs)长度小于64的小包通常是需要快些的,一般是用来确认tcp的连接的,
#让它跑快些的通道吧.也可以把下面两行屏蔽,因为再下面有更多更明细的端口分类.
#iptables -t mangle -A PREROUTING -p tcp -m length --length :64 -j MARK --set-mark 2
#iptables -t mangle -A PREROUTING -p tcp -m length --length :64 -j RETURN
&nbsp;
#ftp放第2类,因为一般是小包, ftp-data放在第5类,因为一般是大量数据的传送.
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp-data -j MARK --set-mark 5
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport ftp-data -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp-data -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport ftp-data -j RETURN
##提高ssh数据包的优先权：放在第1类,要知道ssh是交互式的和重要的,不容待慢哦
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 22 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 22 -j RETURN
#
##smtp邮件：放在第4类,因为有时有人发送很大的邮件,为避免它堵塞,让它跑4道吧
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 25 -j MARK --set-mark 4
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 25 -j RETURN
#iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 25 -j MARK --set-mark 8
#iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 25 -j RETURN
## name-domain server：放在第1类,这样连接带有域名的连接才能快速找到对应的地址,提高速度的一法
iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j RETURN
#
## http：放在第3类,是最常用的,最多人用的,
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j RETURN
##pop邮件：放在第3类
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 110 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 110 -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 110 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 110 -j RETURN
## https：放在第3类
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 443 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 443 -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 443 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 443 -j RETURN
## Microsoft-SQL-Server：放在第2类,我这里认为较重要,一定要保证速度的和优先的.
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 1433 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 1433 -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 1433 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 1433 -j RETURN
&nbsp;
## voip用, 提高,语音通道要保持高速,才不会断续.
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 1720 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 1720 -j RETURN
iptables -t mangle -A PREROUTING -p udp -m udp --dport 1720 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p udp -m udp --dport 1720 -j RETURN
&nbsp;
## vpn ,用作voip的,也要走高速路,才不会断续.
iptables -t mangle -A PREROUTING -p udp -m udp --dport 1723 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -p udp -m udp --dport 1723 -j RETURN
&nbsp;
## 放在第1类,因为我觉得它在我心中很重要,优先.
#iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 7070 -j MARK --set-mark 1
#iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 7070 -j RETURN
&nbsp;
## WWW caching service：放在第3类
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j MARK --set-mark 3
iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j RETURN
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 8080 -j MARK --set-mark 8
iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 8080 -j RETURN
&nbsp;
##提高本地数据包的优先权：放在第1
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 22 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p tcp -m tcp --dport 22 -j RETURN
&nbsp;
iptables -t mangle -A OUTPUT -p icmp -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -p icmp -j RETURN
&nbsp;
#本地small packets (probably just ACKs)
iptables -t mangle -A OUTPUT -p tcp -m length --length :64 -j MARK --set-mark 2
iptables -t mangle -A OUTPUT -p tcp -m length --length :64 -j RETURN
&nbsp;
#(4). 向PREROUTING中添加完mangle规则后，用这条规则结束PREROUTING表：
##也就是说前面没有打过标记的数据包将交给1:24处理。
##实际上是不必要的，因为1:24是缺省类，但仍然打上标记是为了保持整个设置的协调一致，而且这样
#还能看到规则的包计数。
&nbsp;
iptables -t mangle -A PREROUTING -i $DEV -j MARK --set-mark 6
echo &quot;标记完毕! mangle mark done!&quot;
}
#-----------------------------------------------------------------------------------------------------
&nbsp;
#8.取消mangle标记用的自定义函数
stop_mangle() {
&nbsp;
        echo -n &quot;停止数据标记 stop mangle table......&quot;
        ( iptables -t mangle -F &amp;&amp; echo &quot;ok.&quot; ) || echo &quot;error.&quot;
}
&nbsp;
#9.取消队列用的       
stop_routing() {
        echo -n &quot;(删除所有队列......)&quot;
        ( tc qdisc del dev $DEV root &amp;&amp; tc qdisc del dev $DEV ingress &amp;&amp; echo &quot;ok.删除成功!&quot; ) || echo &quot;error.&quot;
}
&nbsp;
#10.显示状态
status() {
        echo &quot;1.show qdisc $DEV (显示上行队列):----------------------------------------------&quot;
        tc -s qdisc show dev $DEV
        echo &quot;2.show class $DEV (显示上行分类):----------------------------------------------&quot;
        tc class show dev $DEV
        echo &quot;3. tc -s class show dev $DEV (显示上行队列和分类流量详细信息):------------------&quot;
        tc -s class show dev $DEV
        echo &quot;3. tc -s filter ls dev $DEV (显示下行队列和分类流量详细信息):------------------&quot;
        tc filter ls dev $DEV parent ffff:
        echo &quot;说明:设置总队列上行带宽 $UPLINK k.&quot;
        echo &quot;1. classid 1:11 ssh、dns、和带有SYN标记的数据包。这是最高优先权的类包并最先类 &quot;
        echo &quot;2. classid 1:12 重要数据,这是较高优先权的类。&quot;
        echo &quot;3. classid 1:21 web,pop 服务 &quot;
        echo &quot;4. classid 1:22 smtp服务 &quot;
        echo &quot;5. classid 1:23 ftp-data服务 &quot;
        echo &quot;6. classid 1:24 其他服务 &quot;
        echo &quot;7. classid 1:3 VIP通道 &quot;
}
&nbsp;
#11.显示帮助
usage() {
        echo &quot;使用方法(usage): `basename $0` [start | stop | restart | status | mangle ]&quot;
        echo &quot;参数作用:&quot;
        echo &quot;start   开始流量控制&quot;
        echo &quot;stop    停止流量控制&quot;
        echo &quot;restart 重启流量控制&quot;
        echo &quot;status 显示队列流量&quot;
        echo &quot;mangle 显示mark标记&quot;
}
&nbsp;
#----------------------------------------------------------------------------------------------
#12. 下面是脚本运行参数的选择的控制
#
#kernel=` kernelversion`
kernel=`uname -r|cut -b 1-3`
case &quot;$kernel&quot; in
   2.2)
      echo &quot; (!) Error: won't do anything with 2.2.x 不支持内核2.2.x&quot;
      exit 1
      ;;
&nbsp;
   2.4|2.6)
      case &quot;$1&quot; in
         start)
            ( start_routing &amp;&amp; start_mangle &amp;&amp; echo &quot;开始流量控制! TC started!&quot; ) || echo &quot;error.&quot;
&nbsp;
            exit 0
            ;;
&nbsp;
         stop)
            ( stop_routing &amp;&amp; stop_mangle &amp;&amp; echo &quot;停止流量控制! TC stopped!&quot; ) || echo &quot;error.&quot;
&nbsp;
            exit 0
            ;;
         restart)
            stop_routing
            stop_mangle
            start_routing
            start_mangle
&nbsp;
            echo &quot;流量控制规则重新装载!&quot;
            ;;
         status)
            status
            ;;
&nbsp;
         mangle)
            echo &quot;iptables -t mangle -L (显示目前mangle表表标记详细):&quot;
            iptables -t mangle -nL
            ;;
&nbsp;
&nbsp;
         *) usage
            exit 1
            ;;
      esac
      ;;
&nbsp;
   *)
      echo &quot; (!) Error: Unknown kernel version. check it !&quot;
      exit 1
      ;;
esac
echo &quot;script done!&quot;
exit 1</pre></div></div>

<p>http://hi.baidu.com/zhangyingowen/blog/item/185d77fb15a89017a8d311f2.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panwenbin.com/2011/12/28/%e9%9d%9e%e5%b8%b8%e6%9c%89%e7%94%a8%e7%9a%84tc%e9%99%90%e9%80%9f%e4%be%8b%e5%ad%90/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nginx下搭建flv视频服务器且支持视频拖动进度条播放</title>
		<link>http://www.panwenbin.com/2011/12/27/nginx%e4%b8%8b%e6%90%ad%e5%bb%baflv%e8%a7%86%e9%a2%91%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%94%e6%94%af%e6%8c%81%e8%a7%86%e9%a2%91%e6%8b%96%e5%8a%a8%e8%bf%9b%e5%ba%a6%e6%9d%a1%e6%92%ad%e6%94%be/</link>
		<comments>http://www.panwenbin.com/2011/12/27/nginx%e4%b8%8b%e6%90%ad%e5%bb%baflv%e8%a7%86%e9%a2%91%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%94%e6%94%af%e6%8c%81%e8%a7%86%e9%a2%91%e6%8b%96%e5%8a%a8%e8%bf%9b%e5%ba%a6%e6%9d%a1%e6%92%ad%e6%94%be/#comments</comments>
		<pubDate>Tue, 27 Dec 2011 05:42:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Nginx]]></category>

		<guid isPermaLink="false">http://www.panwenbin.com/?p=1986</guid>
		<description><![CDATA[目前，由于Flash的流行，网络上绝大多数的微视频网站都采用了Flv格式来播放视频。 在互联网上播放视频，有两种方式，一种是文件方式，即通过HTTP协议访问视频文件，这种方式的缺点是不能从特定的帧开始播放；另外一种就是采用专门的流媒体服务器，这种方式的缺点是要搭建复杂的流媒体服务器。不过，现在有了一种集合了以上两种方式优点的一种解决方案，即通过HTTP来实现伪流媒体。本文描述的就是这样的一种解决方案。 首先配置nginx服务支持flv模块功能 ⑴查看你的nginx是否已支持flv功能模块 [root@localhost ~]# /usr/local/nginx/sbin/nginx -V  //查看nginx服务支持 结果： nginx version: nginx/0.8.24 built by gcc 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC) configure arguments: &#8211;prefix=/usr/local/nginx &#8211;with-http_flv_module &#8211;with-http_gzip_static_module &#8211;with-http_stub_status_module 分析：我的nginx版本0.8.24，http_flv_module已经开启，支持flv服务 ⑵安装支持flv模块的nginx服务器： #tar zxvf nginx-0.8.24.tar.gz #cd nginx-0.8.24 #./configure &#8211;prefix=/usr/local/nginx  &#8211;with-http_flv_module &#8211;with-http_gzip_static_module &#8211;with-http_stub_status_module //开启flv模块 #make &#38;&#38; make install #/usr/local/nginx/sbin/nginx       //启Nginx ⑶nginx服务器配置（nginx.conf文件） server { listen       80; server_name  localhost; charset utf-8; location / { root   html; index  index.php index.html index.htm; } location ~ \.flv { flv; limit_rate_after 10m; limit_conn one 1; limit_rate 85k; } } 使用location 将 .flv的文件指向flv模块即可。 以上使用了limit_rate 是为了限速，当 flv视频下载超过10M，则限速到85K，只允许用户开1个进程，也就是先快速缓存可以播放，后面的慢慢下载。 ⑷安装支持flv拖放进度条的播放器 上面三步都是安装支持nginx服务支持flv功能的，现在需要支持flv拖放进度条的播放器. 你需要有一个能够播放Flv视频的播放器，很显然，它还需要能够嵌入到网页中。目前比较流行的，功能上也还比较完善的一个Flv播放器就是 JW FLV Media Player（也称为 jwplayer）。它的网址是： http://www.longtailvideo.com/players/jw-flv-player/ 这个播放器支持视频加入广告和视频节目单功能， 下载包里面有很全的实例和使用方式， 将包中的player.swf（如果是带有Viral插件的，就是player-viral.swf）放到你的网站内，这就是用来提供视频播放的播放器。至于包中其它的文件，都可以不要。 接下来，将播放器嵌入到你的视频播放网页中： 直接嵌入，使用Object/Embed代码嵌入： &#60;embed type=”application/x-shockwave-flash” id=”player2&#8243; name=”player2&#8243; src=”player.swf” width=”328&#8243; height=”200&#8243; allowscriptaccess=”always” allowfullscreen=”true” flashvars=”file=http://192.168.40.135/test.flv&#38;image=http://192.168.40.135/preview.jpg&#38;autostart=false&#38;type=http&#38;streamer=start” &#62;  &#60;/embed&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>目前，由于Flash的流行，网络上绝大多数的微视频网站都采用了Flv格式来播放视频。</p>
<p>在互联网上播放视频，有两种方式，一种是文件方式，即通过HTTP协议访问视频文件，这种方式的缺点是不能从特定的帧开始播放；另外一种就是采用专门的流媒体服务器，这种方式的缺点是要搭建复杂的流媒体服务器。不过，现在有了一种集合了以上两种方式优点的一种解决方案，即通过HTTP来实现伪流媒体。本文描述的就是这样的一种解决方案。</p>
<p>首先配置nginx服务支持flv模块功能</p>
<p><strong>⑴查看你的nginx是否已支持flv功能模块</strong></p>
<p>[root@localhost ~]# /usr/local/nginx/sbin/nginx -V  //查看nginx服务支持</p>
<p>结果：</p>
<p>nginx version: nginx/0.8.24</p>
<p>built by gcc 4.4.4 20100726 (Red Hat 4.4.4-13) (GCC)</p>
<p>configure arguments: &#8211;prefix=/usr/local/nginx &#8211;with-http_flv_module &#8211;with-http_gzip_static_module &#8211;with-http_stub_status_module</p>
<p>分析：我的nginx版本0.8.24，http_flv_module已经开启，支持flv服务</p>
<p><strong>⑵安装支持flv模块的nginx服务器：</strong></p>
<p>#tar zxvf nginx-0.8.24.tar.gz</p>
<p>#cd nginx-0.8.24</p>
<p>#./configure &#8211;prefix=/usr/local/nginx  &#8211;with-http_flv_module &#8211;with-http_gzip_static_module &#8211;with-http_stub_status_module //开启flv模块</p>
<p>#make &amp;&amp; make install</p>
<p>#/usr/local/nginx/sbin/nginx       //启Nginx</p>
<p><strong>⑶nginx服务器配置（nginx.conf文件）</strong></p>
<p>server</p>
<p>{</p>
<p>listen       80;</p>
<p>server_name  localhost;</p>
<p>charset utf-8;</p>
<p>location / {</p>
<p>root   html;</p>
<p>index  index.php index.html index.htm;</p>
<p>}</p>
<p>location ~ \.flv {</p>
<p>flv;</p>
<p>limit_rate_after 10m;</p>
<p>limit_conn one 1;</p>
<p>limit_rate 85k;</p>
<p>}</p>
<p>}</p>
<p>使用location 将 .flv的文件指向flv模块即可。</p>
<p>以上使用了limit_rate 是为了限速，当 flv视频下载超过10M，则限速到85K，只允许用户开1个进程，也就是先快速缓存可以播放，后面的慢慢下载。</p>
<p><strong>⑷安装支持flv拖放进度条的播放器</strong></p>
<p>上面三步都是安装支持nginx服务支持flv功能的，现在需要支持flv拖放进度条的播放器.</p>
<p>你需要有一个能够播放Flv视频的播放器，很显然，它还需要能够嵌入到网页中。目前比较流行的，功能上也还比较完善的一个Flv播放器就是 JW FLV Media Player（也称为 jwplayer）。它的网址是：</p>
<p><a href="http://www.longtailvideo.com/players/jw-flv-player/">http://www.longtailvideo.com/players/jw-flv-player/</a></p>
<p>这个播放器支持视频加入广告和视频节目单功能，</p>
<p>下载包里面有很全的实例和使用方式，</p>
<p>将包中的player.swf（如果是带有Viral插件的，就是player-viral.swf）放到你的网站内，这就是用来提供视频播放的播放器。至于包中其它的文件，都可以不要。</p>
<p>接下来，将播放器嵌入到你的视频播放网页中：</p>
<p>直接嵌入，使用Object/Embed代码嵌入：</p>
<p>&lt;embed</p>
<p>type=”application/x-shockwave-flash”</p>
<p>id=”player2&#8243;</p>
<p>name=”player2&#8243;</p>
<p>src=”player.swf”</p>
<p>width=”328&#8243;</p>
<p>height=”200&#8243;</p>
<p>allowscriptaccess=”always”</p>
<p>allowfullscreen=”true”</p>
<p>flashvars=”file=http://192.168.40.135/test.flv&amp;image=http://192.168.40.135/preview.jpg&amp;autostart=false&amp;type=http&amp;streamer=start”</p>
<p>&gt;  &lt;/embed&gt;</p>
<p>file:”video.flv”, // FLV视频地址</p>
<p>type:”http”,        // 数据类型，本文是基于http模式的，这个必须写滴</p>
<p>image:”preview.jpg”,// 开始播放之前的预览图</p>
<p>autostart:”false”,  // 是否自动播放</p>
<p>streamer:”start”，   // 参数为 “start”,这个参数用于传递给服务器从特定的关键帧开始播放，nginx编译了 flv 模块 所以是支持的。。</p>
<p><strong>⑸添加关键帧</strong></p>
<p>如果一个Flv视频要能够被拖到特定点播放，该Flv需要在其metadata中有关键帧的信息。如果你的Flv视频制作的时候没有这些信息，也是不能拖放播放的。可以使用yamdi来为你的视频加上关键帧信息 ：</p>
<p>安装：</p>
<p>1 [root@localhost ~]#wget http://sourceforge.net/projects/yamdi/files/yamdi/1.4/yamdi-1.4.tar.gz/download</p>
<p>2 [root@localhost ~]#tar zxvf yamdi-1.4.tar.gz</p>
<p>3 [root@localhost ~]#cd yamdi-1.4/</p>
<p>4 [root@localhost yamdi-1.4]#make &amp;&amp; make install</p>
<p>使用方法：</p>
<p>yamdi -i source.flv -o dest.flv //原视频 输出视频</p>
<p>http://blog.csdn.net/youacai/article/details/6728013</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panwenbin.com/2011/12/27/nginx%e4%b8%8b%e6%90%ad%e5%bb%baflv%e8%a7%86%e9%a2%91%e6%9c%8d%e5%8a%a1%e5%99%a8%e4%b8%94%e6%94%af%e6%8c%81%e8%a7%86%e9%a2%91%e6%8b%96%e5%8a%a8%e8%bf%9b%e5%ba%a6%e6%9d%a1%e6%92%ad%e6%94%be/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ipad的user-agent</title>
		<link>http://www.panwenbin.com/2011/12/26/ipad%e7%9a%84user-agent/</link>
		<comments>http://www.panwenbin.com/2011/12/26/ipad%e7%9a%84user-agent/#comments</comments>
		<pubDate>Mon, 26 Dec 2011 11:22:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[软件]]></category>

		<guid isPermaLink="false">http://www.panwenbin.com/?p=1982</guid>
		<description><![CDATA[--user-agent=&#34;Mozilla/5.0(iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8G4 Safari/6533.18.5&#34;]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;"> --user-agent=&quot;Mozilla/5.0(iPad; U; CPU OS 4_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8G4 Safari/6533.18.5&quot;</pre></div></div>

]]></content:encoded>
			<wfw:commentRss>http://www.panwenbin.com/2011/12/26/ipad%e7%9a%84user-agent/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>vmware运行游戏或软件，被检测出在虚拟机中运行，解决方法</title>
		<link>http://www.panwenbin.com/2011/12/11/vmware%e8%bf%90%e8%a1%8c%e6%b8%b8%e6%88%8f%e6%88%96%e8%bd%af%e4%bb%b6%ef%bc%8c%e8%a2%ab%e6%a3%80%e6%b5%8b%e5%87%ba%e5%9c%a8%e8%99%9a%e6%8b%9f%e6%9c%ba%e4%b8%ad%e8%bf%90%e8%a1%8c%ef%bc%8c%e8%a7%a3/</link>
		<comments>http://www.panwenbin.com/2011/12/11/vmware%e8%bf%90%e8%a1%8c%e6%b8%b8%e6%88%8f%e6%88%96%e8%bd%af%e4%bb%b6%ef%bc%8c%e8%a2%ab%e6%a3%80%e6%b5%8b%e5%87%ba%e5%9c%a8%e8%99%9a%e6%8b%9f%e6%9c%ba%e4%b8%ad%e8%bf%90%e8%a1%8c%ef%bc%8c%e8%a7%a3/#comments</comments>
		<pubDate>Sun, 11 Dec 2011 15:33:31 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[虚拟机]]></category>

		<guid isPermaLink="false">http://www.panwenbin.com/?p=1965</guid>
		<description><![CDATA[修改配置文件 .vmx 在最后增加 monitor_control.restrict_backdoor = “TRUE” 如果还不行 增加 disable_acceleration = “TRUE”]]></description>
			<content:encoded><![CDATA[<p>修改配置文件 .vmx<br />
在最后增加<br />
monitor_control.restrict_backdoor = “TRUE”<br />
如果还不行<br />
增加<br />
disable_acceleration = “TRUE”</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panwenbin.com/2011/12/11/vmware%e8%bf%90%e8%a1%8c%e6%b8%b8%e6%88%8f%e6%88%96%e8%bd%af%e4%bb%b6%ef%bc%8c%e8%a2%ab%e6%a3%80%e6%b5%8b%e5%87%ba%e5%9c%a8%e8%99%9a%e6%8b%9f%e6%9c%ba%e4%b8%ad%e8%bf%90%e8%a1%8c%ef%bc%8c%e8%a7%a3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>bash里用cat EOF来输出多行文本</title>
		<link>http://www.panwenbin.com/2011/12/11/bash%e9%87%8c%e7%94%a8cat-eof%e6%9d%a5%e8%be%93%e5%87%ba%e5%a4%9a%e8%a1%8c%e6%96%87%e6%9c%ac/</link>
		<comments>http://www.panwenbin.com/2011/12/11/bash%e9%87%8c%e7%94%a8cat-eof%e6%9d%a5%e8%be%93%e5%87%ba%e5%a4%9a%e8%a1%8c%e6%96%87%e6%9c%ac/#comments</comments>
		<pubDate>Sun, 11 Dec 2011 13:17:53 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[BASH]]></category>

		<guid isPermaLink="false">http://www.panwenbin.com/?p=1960</guid>
		<description><![CDATA[cat &#62; file &#60;&#60;EOF some some some EOF 如果不想$被替换成变量 cat &#62; file &#60;&#60;\EOF some $some some EOF 参考资料: http://tldp.org/LDP/abs/html/here-docs.html Example 19-7. Parameter substitution turned off]]></description>
			<content:encoded><![CDATA[
<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">cat &gt; file &lt;&lt;EOF
some some
some
EOF</pre></div></div>

<p>如果不想$被替换成变量</p>

<div class="wp_syntax"><div class="code"><pre class="shell" style="font-family:monospace;">cat &gt; file &lt;&lt;\EOF
some $some
some
EOF</pre></div></div>

<p>参考资料:</p>
<p>http://tldp.org/LDP/abs/html/here-docs.html</p>
<p>Example 19-7. Parameter substitution turned off</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panwenbin.com/2011/12/11/bash%e9%87%8c%e7%94%a8cat-eof%e6%9d%a5%e8%be%93%e5%87%ba%e5%a4%9a%e8%a1%8c%e6%96%87%e6%9c%ac/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>javascript 格式化</title>
		<link>http://www.panwenbin.com/2011/11/20/javascript-%e6%a0%bc%e5%bc%8f%e5%8c%96/</link>
		<comments>http://www.panwenbin.com/2011/11/20/javascript-%e6%a0%bc%e5%bc%8f%e5%8c%96/#comments</comments>
		<pubDate>Sat, 19 Nov 2011 17:08:47 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[jquery/JS]]></category>

		<guid isPermaLink="false">http://www.panwenbin.com/?p=1935</guid>
		<description><![CDATA[http://www.css88.com/tool/js_beautify/ http://jsbeautifier.org/ http://tool.chinaz.com/Tools/JsFormat.aspx 都是http://jsbeautifier.org/提供的]]></description>
			<content:encoded><![CDATA[<p>http://www.css88.com/tool/js_beautify/</p>
<p>http://jsbeautifier.org/</p>
<p>http://tool.chinaz.com/Tools/JsFormat.aspx</p>
<p>都是http://jsbeautifier.org/提供的</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panwenbin.com/2011/11/20/javascript-%e6%a0%bc%e5%bc%8f%e5%8c%96/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>vmware用桥接，vm获取不到IP地址</title>
		<link>http://www.panwenbin.com/2011/11/18/vmware%e7%94%a8%e6%a1%a5%e6%8e%a5%ef%bc%8cvm%e8%8e%b7%e5%8f%96%e4%b8%8d%e5%88%b0ip%e5%9c%b0%e5%9d%80/</link>
		<comments>http://www.panwenbin.com/2011/11/18/vmware%e7%94%a8%e6%a1%a5%e6%8e%a5%ef%bc%8cvm%e8%8e%b7%e5%8f%96%e4%b8%8d%e5%88%b0ip%e5%9c%b0%e5%9d%80/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 12:32:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[虚拟机]]></category>

		<guid isPermaLink="false">http://www.panwenbin.com/?p=1926</guid>
		<description><![CDATA[原因是主机有多个网卡，在Edit &#8211; Virtual Network Editor里面设置 VMnet0(或者已经有bridge类型的)为bridge类型，bridge to指定的网卡]]></description>
			<content:encoded><![CDATA[<p>原因是主机有多个网卡，在Edit &#8211; Virtual Network Editor里面设置 VMnet0(或者已经有bridge类型的)为bridge类型，bridge to指定的网卡</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panwenbin.com/2011/11/18/vmware%e7%94%a8%e6%a1%a5%e6%8e%a5%ef%bc%8cvm%e8%8e%b7%e5%8f%96%e4%b8%8d%e5%88%b0ip%e5%9c%b0%e5%9d%80/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>转:用Python干实事（一）自动修改Windows的IP、网关和DNS设置</title>
		<link>http://www.panwenbin.com/2011/11/18/%e8%bd%ac%e7%94%a8python%e5%b9%b2%e5%ae%9e%e4%ba%8b%ef%bc%88%e4%b8%80%ef%bc%89%e8%87%aa%e5%8a%a8%e4%bf%ae%e6%94%b9windows%e7%9a%84ip%e3%80%81%e7%bd%91%e5%85%b3%e5%92%8cdns%e8%ae%be%e7%bd%ae/</link>
		<comments>http://www.panwenbin.com/2011/11/18/%e8%bd%ac%e7%94%a8python%e5%b9%b2%e5%ae%9e%e4%ba%8b%ef%bc%88%e4%b8%80%ef%bc%89%e8%87%aa%e5%8a%a8%e4%bf%ae%e6%94%b9windows%e7%9a%84ip%e3%80%81%e7%bd%91%e5%85%b3%e5%92%8cdns%e8%ae%be%e7%bd%ae/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 17:33:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.panwenbin.com/?p=1918</guid>
		<description><![CDATA[最近由于工作和学习需要在家里装上了小区宽带（80元/月），整个小区共享30M带宽，开始以为会很慢，结果用起来速度还是挺不错的。不说废话了，言归正传，由于家里和公司的IP设置不一样（都是静态的），每次回家和去公司都需要手动改IP，改了几天嫌麻烦就想写个小程序可以自动设置IP，只需要双击一下程序就搞定IP设置。就上网搜了一下，大概有这么几种方法：使用Windows的脚本（http://www.microsoft.com/china/technet/community/scriptcenter/topics/networking/default.mspx）或者编写一个批处理使用netsh命令来完成这个任务，当然用C/C++也是绝对可以的。不过为了练习一下Python和想更多了解一下Python，所以就决定用Python来写个自动设置IP的程序。参考文章：http://www.pconline.com.cn/pcedu/empolder/gj/vc/0508/694212.html 代码如下： 1 # FileName: modify_ip.py 2 # Author : qujinlong 3 # Email : qujinlong123@gmail.com 4 # Date : 2007-06-20 5 6 import _winreg 7 8 from ctypes import * 9 10 # MessageBox = windll.user32.MessageBoxA 11 # MessageBox(0, 'Welcome!', 'Hello', 0) 12 13 print '正在修改IP，请稍后' 14 15 netCfgInstanceID = None 16 17 hkey [...]]]></description>
			<content:encoded><![CDATA[<p>最近由于工作和学习需要在家里装上了小区宽带（80元/月），整个小区共享30M带宽，开始以为会很慢，结果用起来速度还是挺不错的。不说废话了，言归正传，由于家里和公司的IP设置不一样（都是静态的），每次回家和去公司都需要手动改IP，改了几天嫌麻烦就想写个小程序可以自动设置IP，只需要双击一下程序就搞定IP设置。就上网搜了一下，大概有这么几种方法：使用Windows的脚本（http://www.microsoft.com/china/technet/community/scriptcenter/topics/networking/default.mspx）或者编写一个批处理使用netsh命令来完成这个任务，当然用C/C++也是绝对可以的。不过为了练习一下Python和想更多了解一下Python，所以就决定用Python来写个自动设置IP的程序。参考文章：http://www.pconline.com.cn/pcedu/empolder/gj/vc/0508/694212.html<br />
代码如下：</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff4500;">1</span> <span style="color: #808080; font-style: italic;"># FileName: modify_ip.py</span>
  <span style="color: #ff4500;">2</span> <span style="color: #808080; font-style: italic;"># Author  : qujinlong</span>
  <span style="color: #ff4500;">3</span> <span style="color: #808080; font-style: italic;"># Email   : qujinlong123@gmail.com</span>
  <span style="color: #ff4500;">4</span> <span style="color: #808080; font-style: italic;"># Date    : 2007-06-20</span>
  <span style="color: #ff4500;">5</span> 
  <span style="color: #ff4500;">6</span> <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">_winreg</span>
  <span style="color: #ff4500;">7</span> 
  <span style="color: #ff4500;">8</span> <span style="color: #ff7700;font-weight:bold;">from</span> ctypes <span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #66cc66;">*</span>
  <span style="color: #ff4500;">9</span> 
 <span style="color: #ff4500;">10</span> <span style="color: #808080; font-style: italic;"># MessageBox = windll.user32.MessageBoxA</span>
 <span style="color: #ff4500;">11</span> <span style="color: #808080; font-style: italic;"># MessageBox(0, 'Welcome!', 'Hello', 0)</span>
 <span style="color: #ff4500;">12</span> 
 <span style="color: #ff4500;">13</span> <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'正在修改IP，请稍后'</span>
 <span style="color: #ff4500;">14</span> 
 <span style="color: #ff4500;">15</span> netCfgInstanceID = <span style="color: #008000;">None</span>
 <span style="color: #ff4500;">16</span> 
 <span style="color: #ff4500;">17</span> hkey = <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">OpenKey</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">_winreg</span>.<span style="color: black;">HKEY_LOCAL_MACHINE</span>, \
 <span style="color: #ff4500;">18</span>                        r<span style="color: #483d8b;">'System<span style="color: #000099; font-weight: bold;">\C</span>urrentControlSet<span style="color: #000099; font-weight: bold;">\C</span>ontrol<span style="color: #000099; font-weight: bold;">\C</span>lass<span style="color: #000099; font-weight: bold;">\{</span>4d36e972-e325-11ce-bfc1-08002be10318}'</span><span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">19</span> 
 <span style="color: #ff4500;">20</span> keyInfo = <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">QueryInfoKey</span><span style="color: black;">&#40;</span>hkey<span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">21</span> 
 <span style="color: #ff4500;">22</span> <span style="color: #808080; font-style: italic;"># 寻找网卡对应的适配器名称 netCfgInstanceID</span>
 <span style="color: #ff4500;">23</span> <span style="color: #ff7700;font-weight:bold;">for</span> index <span style="color: #ff7700;font-weight:bold;">in</span> <span style="color: #008000;">range</span><span style="color: black;">&#40;</span>keyInfo<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>:
 <span style="color: #ff4500;">24</span>     hSubKeyName = <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">EnumKey</span><span style="color: black;">&#40;</span>hkey, index<span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">25</span>     hSubKey = <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">OpenKey</span><span style="color: black;">&#40;</span>hkey, hSubKeyName<span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">26</span> 
 <span style="color: #ff4500;">27</span>     <span style="color: #ff7700;font-weight:bold;">try</span>:
 <span style="color: #ff4500;">28</span>         hNdiInfKey = <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">OpenKey</span><span style="color: black;">&#40;</span>hSubKey, r<span style="color: #483d8b;">'Ndi<span style="color: #000099; font-weight: bold;">\I</span>nterfaces'</span><span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">29</span>         lowerRange = <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">QueryValueEx</span><span style="color: black;">&#40;</span>hNdiInfKey, <span style="color: #483d8b;">'LowerRange'</span><span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">30</span> 
 <span style="color: #ff4500;">31</span>         <span style="color: #808080; font-style: italic;"># 检查是否是以太网</span>
 <span style="color: #ff4500;">32</span>         <span style="color: #ff7700;font-weight:bold;">if</span> lowerRange<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #483d8b;">'ethernet'</span>:
 <span style="color: #ff4500;">33</span>             driverDesc = <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">QueryValueEx</span><span style="color: black;">&#40;</span>hSubKey, <span style="color: #483d8b;">'DriverDesc'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
 <span style="color: #ff4500;">34</span>             <span style="color: #808080; font-style: italic;"># print 'DriverDesc: ', driverDesc</span>
 <span style="color: #ff4500;">35</span>             netCfgInstanceID = <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">QueryValueEx</span><span style="color: black;">&#40;</span>hSubKey, <span style="color: #483d8b;">'NetCfgInstanceID'</span><span style="color: black;">&#41;</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
 <span style="color: #ff4500;">36</span>             <span style="color: #808080; font-style: italic;"># print 'NetCfgInstanceID: ', netCfgInstanceID</span>
 <span style="color: #ff4500;">37</span>             <span style="color: #ff7700;font-weight:bold;">break</span>
 <span style="color: #ff4500;">38</span> 
 <span style="color: #ff4500;">39</span>         <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">CloseKey</span><span style="color: black;">&#40;</span>hNdiInfKey<span style="color: black;">&#41;</span> <span style="color: #808080; font-style: italic;"># 关闭 RegKey</span>
 <span style="color: #ff4500;">40</span>     <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">WindowsError</span>:
 <span style="color: #ff4500;">41</span>         <span style="color: #ff7700;font-weight:bold;">print</span> r<span style="color: #483d8b;">'Message: No Ndi<span style="color: #000099; font-weight: bold;">\I</span>nterfaces Key'</span>
 <span style="color: #ff4500;">42</span> 
 <span style="color: #ff4500;">43</span>     <span style="color: #808080; font-style: italic;"># 循环结束，目前只提供修改一个网卡IP的功能</span>
 <span style="color: #ff4500;">44</span>     <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">CloseKey</span><span style="color: black;">&#40;</span>hSubKey<span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">45</span> 
 <span style="color: #ff4500;">46</span> <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">CloseKey</span><span style="color: black;">&#40;</span>hkey<span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">47</span> 
 <span style="color: #ff4500;">48</span> <span style="color: #ff7700;font-weight:bold;">if</span> netCfgInstanceID == <span style="color: #008000;">None</span>:
 <span style="color: #ff4500;">49</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'修改IP失败 - 没有找到网络适配器'</span>    
 <span style="color: #ff4500;">50</span>     exit<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">51</span> 
 <span style="color: #ff4500;">52</span> <span style="color: #808080; font-style: italic;"># print netCfgInstanceID</span>
 <span style="color: #ff4500;">53</span> 
 <span style="color: #ff4500;">54</span> <span style="color: #808080; font-style: italic;"># 通过修改注册表设置IP</span>
 <span style="color: #ff4500;">55</span> strKeyName = <span style="color: #483d8b;">'System<span style="color: #000099; font-weight: bold;">\\</span>CurrentControlSet<span style="color: #000099; font-weight: bold;">\\</span>Services<span style="color: #000099; font-weight: bold;">\\</span>Tcpip<span style="color: #000099; font-weight: bold;">\\</span>Parameters<span style="color: #000099; font-weight: bold;">\\</span>Interfaces<span style="color: #000099; font-weight: bold;">\\</span>'</span> + netCfgInstanceID
 <span style="color: #ff4500;">56</span> 
 <span style="color: #ff4500;">57</span> <span style="color: #808080; font-style: italic;"># print strKeyName</span>
 <span style="color: #ff4500;">58</span> 
 <span style="color: #ff4500;">59</span> hkey = <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">OpenKey</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">_winreg</span>.<span style="color: black;">HKEY_LOCAL_MACHINE</span>, \
 <span style="color: #ff4500;">60</span>                        strKeyName, \
 <span style="color: #ff4500;">61</span>                        <span style="color: #ff4500;">0</span>, \
 <span style="color: #ff4500;">62</span>                        <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">KEY_WRITE</span><span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">63</span> 
 <span style="color: #ff4500;">64</span> <span style="color: #808080; font-style: italic;"># 定义需要修改的IP地址、子网掩码、默认网关和DNS等</span>
 <span style="color: #ff4500;">65</span> ipAddress = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'192.168.1.135'</span><span style="color: black;">&#93;</span>
 <span style="color: #ff4500;">66</span> subnetMask = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'255.255.255.0'</span><span style="color: black;">&#93;</span>
 <span style="color: #ff4500;">67</span> gateway = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'192.168.1.10'</span><span style="color: black;">&#93;</span>
 <span style="color: #ff4500;">68</span> dnsServer = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'202.106.196.115'</span>, <span style="color: #483d8b;">'202.106.0.20'</span><span style="color: black;">&#93;</span>
 <span style="color: #ff4500;">69</span> 
 <span style="color: #ff4500;">70</span> <span style="color: #ff7700;font-weight:bold;">try</span>:
 <span style="color: #ff4500;">71</span>     <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">SetValueEx</span><span style="color: black;">&#40;</span>hkey, <span style="color: #483d8b;">'IPAddress'</span>, <span style="color: #008000;">None</span>, <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">REG_MULTI_SZ</span>, ipAddress<span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">72</span>     <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">SetValueEx</span><span style="color: black;">&#40;</span>hkey, <span style="color: #483d8b;">'SubnetMask'</span>, <span style="color: #008000;">None</span>, <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">REG_MULTI_SZ</span>, subnetMask<span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">73</span>     <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">SetValueEx</span><span style="color: black;">&#40;</span>hkey, <span style="color: #483d8b;">'DefaultGateway'</span>, <span style="color: #008000;">None</span>, <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">REG_MULTI_SZ</span>, gateway<span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">74</span>     <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">SetValueEx</span><span style="color: black;">&#40;</span>hkey, <span style="color: #483d8b;">'NameServer'</span>, <span style="color: #008000;">None</span>, <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">REG_SZ</span>, <span style="color: #483d8b;">','</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>dnsServer<span style="color: black;">&#41;</span><span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">75</span> <span style="color: #ff7700;font-weight:bold;">except</span> <span style="color: #008000;">WindowsError</span>:
 <span style="color: #ff4500;">76</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'Set IP Error'</span>
 <span style="color: #ff4500;">77</span>     exit<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">78</span> 
 <span style="color: #ff4500;">79</span> <span style="color: #dc143c;">_winreg</span>.<span style="color: black;">CloseKey</span><span style="color: black;">&#40;</span>hkey<span style="color: black;">&#41;</span>
 <span style="color: #ff4500;">80</span> 
 <span style="color: #ff4500;">81</span> <span style="color: #808080; font-style: italic;"># 调用DhcpNotifyConfigChange函数通知IP被修改</span>
 <span style="color: #ff4500;">82</span> DhcpNotifyConfigChange = windll.<span style="color: black;">dhcpcsvc</span>.<span style="color: black;">DhcpNotifyConfigChange</span>
 <span style="color: #ff4500;">83</span> 
 <span style="color: #ff4500;">84</span> inet_addr = windll.<span style="color: black;">Ws2_32</span>.<span style="color: black;">inet_addr</span>
 <span style="color: #ff4500;">85</span> 
 <span style="color: #ff4500;">86</span> <span style="color: #808080; font-style: italic;"># DhcpNotifyConfigChange 函数参数列表：</span>
 <span style="color: #ff4500;">87</span> <span style="color: #808080; font-style: italic;"># LPWSTR lpwszServerName,  本地机器为None</span>
 <span style="color: #ff4500;">88</span> <span style="color: #808080; font-style: italic;"># LPWSTR lpwszAdapterName, 网络适配器名称</span>
 <span style="color: #ff4500;">89</span> <span style="color: #808080; font-style: italic;"># BOOL bNewIpAddress,      True表示修改IP</span>
 <span style="color: #ff4500;">90</span> <span style="color: #808080; font-style: italic;"># DWORD dwIpIndex,         表示修改第几个IP, 从0开始</span>
 <span style="color: #ff4500;">91</span> <span style="color: #808080; font-style: italic;"># DWORD dwIpAddress,       修改后的IP地址</span>
 <span style="color: #ff4500;">92</span> <span style="color: #808080; font-style: italic;"># DWORD dwSubNetMask,      修改后的子码掩码</span>
 <span style="color: #ff4500;">93</span> <span style="color: #808080; font-style: italic;"># int nDhcpAction          对DHCP的操作, 0 - 不修改, 1 - 启用, 2 - 禁用</span>
 <span style="color: #ff4500;">94</span> DhcpNotifyConfigChange<span style="color: black;">&#40;</span><span style="color: #008000;">None</span>, \
 <span style="color: #ff4500;">95</span>                        netCfgInstanceID, \
 <span style="color: #ff4500;">96</span>                        <span style="color: #008000;">True</span>, \
 <span style="color: #ff4500;">97</span>                        <span style="color: #ff4500;">0</span>, \
 <span style="color: #ff4500;">98</span>                        inet_addr<span style="color: black;">&#40;</span>ipAddress<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>, \
 <span style="color: #ff4500;">99</span>                        inet_addr<span style="color: black;">&#40;</span>subnetMask<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>, \
<span style="color: #ff4500;">100</span>                        <span style="color: #ff4500;">0</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">101</span> 
<span style="color: #ff4500;">102</span> <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'修改IP结束'</span>
<span style="color: #ff4500;">103</span></pre></div></div>

<p>Python写起来真是清爽啊，没有一点拖泥带水，没有任何的指针、引用传进传出，也不用搞复杂的类型变来变去。<br />
代码中用到了winreg模块去读取和修改Windows的注册表，还用到了ctypes去链接DLL调用Windows API。<br />
至于程序所使用的修改IP的原理在参考文章中描述的很清楚，有什么问题可以mail我。<br />
程序以简单起见，在修改IP的过程中一些例外情况并没有处理，呵呵，只要自己能正常使用就行了：）<br />
等过两天有时间写个界面程序，可以设置和读取IP配置，类似于Windows的网络设置的UI界面。</p>
<p>不喜欢上面代码中有行号的朋友可以下载这个源程序：自动修改IP的Python程序</p>
<p>改进性能从点滴做起：<br />
(1).由于Python中的字符串是不可变的，每次使用“+”号创建新字符串会拷贝原有的字符串构造新的字符串，降低性能，所以应避免使用“+”号构造字符串（类似于Java）。据此可将上面的一句代码更改如下：<br />
strKeyName = r&#8217;System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces\%s&#8217; % netCfgInstanceID<br />
(2).待续&#8230;</p>
<p>（2007-06-21增加）<br />
经笨笨狗的提示，研究了一下在Python中使用WMI来实现这个功能，比上面的修改注册表方法简单的太多，而且比使用Windows的脚本也简单了一点。先将新版本的代码贴出来（其中使用了Tim Golden对WMI的包装模块，并且这个模块使用了Python for Windows extensions(pywin32)）：</p>

<div class="wp_syntax"><div class="code"><pre class="python" style="font-family:monospace;"><span style="color: #ff4500;">1</span> <span style="color: #808080; font-style: italic;"># -*- coding: cp936 -*-</span>
 <span style="color: #ff4500;">2</span> 
 <span style="color: #ff4500;">3</span> <span style="color: #808080; font-style: italic;"># FileName: modify_ip(wmi).py</span>
 <span style="color: #ff4500;">4</span> <span style="color: #808080; font-style: italic;"># Author  : qujinlong</span>
 <span style="color: #ff4500;">5</span> <span style="color: #808080; font-style: italic;"># Email   : qujinlong123@gmail.com</span>
 <span style="color: #ff4500;">6</span> <span style="color: #808080; font-style: italic;"># Date    : 2007-06-21</span>
 <span style="color: #ff4500;">7</span> 
 <span style="color: #ff4500;">8</span> <span style="color: #ff7700;font-weight:bold;">import</span> wmi
 <span style="color: #ff4500;">9</span> 
<span style="color: #ff4500;">10</span> <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'正在修改IP，请稍后'</span>
<span style="color: #ff4500;">11</span> 
<span style="color: #ff4500;">12</span> wmiService = wmi.<span style="color: black;">WMI</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">13</span> 
<span style="color: #ff4500;">14</span> colNicConfigs = wmiService.<span style="color: black;">Win32_NetworkAdapterConfiguration</span><span style="color: black;">&#40;</span>IPEnabled = <span style="color: #008000;">True</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">15</span> 
<span style="color: #ff4500;">16</span> <span style="color: #808080; font-style: italic;">#for objNicConfig in colNicConfigs:</span>
<span style="color: #ff4500;">17</span> <span style="color: #808080; font-style: italic;">#    print objNicConfig.Index</span>
<span style="color: #ff4500;">18</span> <span style="color: #808080; font-style: italic;">#    print objNicConfig.SettingID</span>
<span style="color: #ff4500;">19</span> <span style="color: #808080; font-style: italic;">#    print objNicConfig.Description</span>
<span style="color: #ff4500;">20</span> <span style="color: #808080; font-style: italic;">#    print objNicConfig.IPAddress</span>
<span style="color: #ff4500;">21</span> <span style="color: #808080; font-style: italic;">#    print objNicConfig.IPSubnet</span>
<span style="color: #ff4500;">22</span> <span style="color: #808080; font-style: italic;">#    print objNicConfig.DefaultIPGateway</span>
<span style="color: #ff4500;">23</span> <span style="color: #808080; font-style: italic;">#    print objNicConfig.DNSServerSearchOrder</span>
<span style="color: #ff4500;">24</span> 
<span style="color: #ff4500;">25</span> <span style="color: #ff7700;font-weight:bold;">if</span> <span style="color: #008000;">len</span><span style="color: black;">&#40;</span>colNicConfigs<span style="color: black;">&#41;</span> <span style="color: #66cc66;">&lt;</span> <span style="color: #ff4500;">1</span>:
<span style="color: #ff4500;">26</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'没有找到可用的网络适配器'</span>
<span style="color: #ff4500;">27</span>     exit<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">28</span> 
<span style="color: #ff4500;">29</span> <span style="color: #808080; font-style: italic;"># 获取第一个网络适配器的设置</span>
<span style="color: #ff4500;">30</span> objNicConfig = colNicConfigs<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span>
<span style="color: #ff4500;">31</span> 
<span style="color: #ff4500;">32</span> <span style="color: #808080; font-style: italic;">#for method_name in objNicConfig.methods:</span>
<span style="color: #ff4500;">33</span> <span style="color: #808080; font-style: italic;">#   method = getattr(objNicConfig, method_name)</span>
<span style="color: #ff4500;">34</span> <span style="color: #808080; font-style: italic;">#   print method</span>
<span style="color: #ff4500;">35</span> 
<span style="color: #ff4500;">36</span> arrIPAddresses = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'192.168.1.136'</span><span style="color: black;">&#93;</span>
<span style="color: #ff4500;">37</span> arrSubnetMasks = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'255.255.0.0'</span><span style="color: black;">&#93;</span>
<span style="color: #ff4500;">38</span> arrDefaultGateways = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'192.168.1.1'</span><span style="color: black;">&#93;</span>
<span style="color: #ff4500;">39</span> arrGatewayCostMetrics = <span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span>
<span style="color: #ff4500;">40</span> arrDNSServers = <span style="color: black;">&#91;</span><span style="color: #483d8b;">'192.168.1.3'</span>, <span style="color: #483d8b;">'202.106.46.151'</span>, <span style="color: #483d8b;">'202.106.0.20'</span><span style="color: black;">&#93;</span>
<span style="color: #ff4500;">41</span> intReboot = <span style="color: #ff4500;">0</span>
<span style="color: #ff4500;">42</span> 
<span style="color: #ff4500;">43</span> returnValue = objNicConfig.<span style="color: black;">EnableStatic</span><span style="color: black;">&#40;</span>IPAddress = arrIPAddresses, SubnetMask = arrSubnetMasks<span style="color: black;">&#41;</span>
<span style="color: #ff4500;">44</span> <span style="color: #ff7700;font-weight:bold;">if</span> returnValue<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">0</span>:
<span style="color: #ff4500;">45</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  成功设置IP'</span>
<span style="color: #ff4500;">46</span> <span style="color: #ff7700;font-weight:bold;">elif</span> returnValue<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">1</span>:
<span style="color: #ff4500;">47</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  成功设置IP'</span>
<span style="color: #ff4500;">48</span>     intReboot += <span style="color: #ff4500;">1</span>
<span style="color: #ff4500;">49</span> <span style="color: #ff7700;font-weight:bold;">else</span>:
<span style="color: #ff4500;">50</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'修改IP失败(IP设置发生错误)'</span>
<span style="color: #ff4500;">51</span>     exit<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">52</span> 
<span style="color: #ff4500;">53</span> returnValue = objNicConfig.<span style="color: black;">SetGateways</span><span style="color: black;">&#40;</span>DefaultIPGateway = arrDefaultGateways, GatewayCostMetric = arrGatewayCostMetrics<span style="color: black;">&#41;</span>
<span style="color: #ff4500;">54</span> <span style="color: #ff7700;font-weight:bold;">if</span> returnValue<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">0</span>:
<span style="color: #ff4500;">55</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  成功设置网关'</span>
<span style="color: #ff4500;">56</span> <span style="color: #ff7700;font-weight:bold;">elif</span> returnValue<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">1</span>:
<span style="color: #ff4500;">57</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  成功设置网关'</span>
<span style="color: #ff4500;">58</span>     intReboot += <span style="color: #ff4500;">1</span>
<span style="color: #ff4500;">59</span> <span style="color: #ff7700;font-weight:bold;">else</span>:
<span style="color: #ff4500;">60</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'修改IP失败(网关设置发生错误)'</span>
<span style="color: #ff4500;">61</span>     exit<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">62</span> 
<span style="color: #ff4500;">63</span> returnValue = objNicConfig.<span style="color: black;">SetDNSServerSearchOrder</span><span style="color: black;">&#40;</span>DNSServerSearchOrder = arrDNSServers<span style="color: black;">&#41;</span>
<span style="color: #ff4500;">64</span> <span style="color: #ff7700;font-weight:bold;">if</span> returnValue<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">0</span>:
<span style="color: #ff4500;">65</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  成功设置DNS'</span>
<span style="color: #ff4500;">66</span> <span style="color: #ff7700;font-weight:bold;">elif</span> returnValue<span style="color: black;">&#91;</span><span style="color: #ff4500;">0</span><span style="color: black;">&#93;</span> == <span style="color: #ff4500;">1</span>:
<span style="color: #ff4500;">67</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  成功设置DNS'</span>
<span style="color: #ff4500;">68</span>     intReboot += <span style="color: #ff4500;">1</span>
<span style="color: #ff4500;">69</span> <span style="color: #ff7700;font-weight:bold;">else</span>:
<span style="color: #ff4500;">70</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'修改IP失败(DNS设置发生错误)'</span>
<span style="color: #ff4500;">71</span>     exit<span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">72</span> 
<span style="color: #ff4500;">73</span> <span style="color: #ff7700;font-weight:bold;">if</span> intReboot <span style="color: #66cc66;">&gt;</span> <span style="color: #ff4500;">0</span>:
<span style="color: #ff4500;">74</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'需要重新启动计算机'</span>
<span style="color: #ff4500;">75</span> <span style="color: #ff7700;font-weight:bold;">else</span>:
<span style="color: #ff4500;">76</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">''</span>
<span style="color: #ff4500;">77</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  修改后的配置为：'</span>
<span style="color: #ff4500;">78</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  IP: '</span>, <span style="color: #483d8b;">', '</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>objNicConfig.<span style="color: black;">IPAddress</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">79</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  掩码:'</span>, <span style="color: #483d8b;">', '</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>objNicConfig.<span style="color: black;">IPSubnet</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">80</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  网关:'</span>, <span style="color: #483d8b;">', '</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>objNicConfig.<span style="color: black;">DefaultIPGateway</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">81</span>     <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'  DNS:'</span>, <span style="color: #483d8b;">', '</span>.<span style="color: black;">join</span><span style="color: black;">&#40;</span>objNicConfig.<span style="color: black;">DNSServerSearchOrder</span><span style="color: black;">&#41;</span>
<span style="color: #ff4500;">82</span> 
<span style="color: #ff4500;">83</span> <span style="color: #ff7700;font-weight:bold;">print</span> <span style="color: #483d8b;">'修改IP结束'</span>
<span style="color: #ff4500;">84</span></pre></div></div>

<p>简单了很多，呵呵</p>
<p>转自: http://www.blogjava.net/qujinlong123/archive/2007/06/20/125434.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panwenbin.com/2011/11/18/%e8%bd%ac%e7%94%a8python%e5%b9%b2%e5%ae%9e%e4%ba%8b%ef%bc%88%e4%b8%80%ef%bc%89%e8%87%aa%e5%8a%a8%e4%bf%ae%e6%94%b9windows%e7%9a%84ip%e3%80%81%e7%bd%91%e5%85%b3%e5%92%8cdns%e8%ae%be%e7%bd%ae/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using the Windows 32 API from Python</title>
		<link>http://www.panwenbin.com/2011/11/18/using-the-windows-32-api-from-python/</link>
		<comments>http://www.panwenbin.com/2011/11/18/using-the-windows-32-api-from-python/#comments</comments>
		<pubDate>Thu, 17 Nov 2011 17:23:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Python]]></category>

		<guid isPermaLink="false">http://www.panwenbin.com/?p=1916</guid>
		<description><![CDATA[具体请看这里 http://vermeulen.ca/python-win32api.html]]></description>
			<content:encoded><![CDATA[<p>具体请看这里</p>
<p>http://vermeulen.ca/python-win32api.html</p>
]]></content:encoded>
			<wfw:commentRss>http://www.panwenbin.com/2011/11/18/using-the-windows-32-api-from-python/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

