年前寫過一個自動投票的小程式,因為對方的網站限制為一個ip地址一天只能投10票,所以這個自動投票的程式在設計初期主要是通過Proxy 伺服器投票,後來同事提供了區域網路內的30個ip地址,雖然自動投票的代碼已經完成了,但是在windows下手動更改ip,真的很累人,而windows的WMI編程又不會,最後找到一台不用的FreeBSD機器,寫了個指令碼,並配置為每天淩晨12點後運行,效果很好。
更改ip地址的指令碼名為cip_vote,可以這樣調用:
./cipvote fxp0 iptable.txt
其中fxp0是網卡的名稱,iptable.txt是可以更改的ip地址清單,其格式為:
210.77.79.201 255.255.255.128 210.77.79.255
210.77.79.202 255.255.255.128 210.77.79.255
...
第一列為需要更改的IP地址,第二列為子網路遮罩,第三列為廣播(broadcast)地址。
具體的更改ip的命令,可以參考ifconfig的線上手冊,這裡就不贅述了,下面是原始碼:
#! /usr/local/bin/bash<br />#首先擷取當前的ip設定,在執行完ip的操作後會恢複為當前設定<br />inet_ip=`ifconfig $1 | awk '$0 ~ / *inet */ {print $2}'`<br />inet_netmask=`ifconfig $1 | awk '$0 ~ / *inet */ {print $4}'`<br />inet_broadcast=`ifconfig $1 | awk '$0 ~ / *inet */ {print $6}'`<br />#讀取檔案的內容並將ip,netmask,broadcast的地址讀入相關數組中儲存<br />temp=`wc -l $2`<br />declare -i i=0;<br />declare -i LineNumber=`echo $temp | awk '{print $1}'`<br />declare -i n;<br />while [ "$i" != "$LineNumber" ]<br />do<br /> n=$i+1<br /> ip_array[n]=`head -n $n $2 | tail -n 1 | awk '{print $1}'`<br /> netmask_array[n]=`head -n $n $2 | tail -n 1 | awk '{print $2}'`<br /> broadcast_array[n]=`head -n $n $2 | tail -n 1 | awk '{print $3}'`<br /> i=$i+1<br />done<br />#用ifconfig命令更改ip地址,然後進行投票工作,最後恢複主機從前的ip設定<br />i=0;<br />while [ "$i" != "$LineNumber" ]<br />do<br /> n=$i+1<br /> echo "ifconfig $1 inet ${ip_array[`echo $n`]} netmask ${netmask_array[`echo $n`]} broadcast ${broadcast_array[`echo $n`]}"<br /> ifconfig $1 inet ${ip_array[`echo $n`]} netmask ${netmask_array[`echo $n`]} broadcast ${broadcast_array[`echo $n`]}<br /> route add default 210.77.79.254</p><p>#在這裡添加要執行操作的代碼<br /> i=$i+1<br />done<br />#最後恢複為原來的設定<br />ifconfig $1 inet $inet_ip netmask $inet_netmask broadcast $inet_broadcast<br />route add default 210.77.68.25