用shell脚本批量连续更改FreeBSD主机ip

年前写过一个自动投票的小程序,因为对方的网站限制为一个ip地址一天只能投10票,所以这个自动投票的程序在设计初期主要是通过代理服务器投票,后来同事提供了局域网内的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 #首先获取当前的ip设置,在执行完ip的操作后会恢复为当前设置 inet_ip=`ifconfig $1 | awk '$0 ~ / *inet */ {print $2}'` inet_netmask=`ifconfig $1 | awk '$0 ~ / *inet */ {print $4}'` inet_broadcast=`ifconfig $1 | awk '$0 ~ / *inet */ {print $6}'` #读取文件的内容并将ip,netmask,broadcast的地址读入相关数组中保存 temp=`wc -l $2` declare -i i=0; declare -i LineNumber=`echo $temp | awk '{print $1}'` declare -i n; while [ "$i" != "$LineNumber" ] do n=$i+1 ip_array[n]=`head -n $n $2 | tail -n 1 | awk '{print $1}'` netmask_array[n]=`head -n $n $2 | tail -n 1 | awk '{print $2}'` broadcast_array[n]=`head -n $n $2 | tail -n 1 | awk '{print $3}'` i=$i+1 done #用ifconfig命令更改ip地址,然后进行投票工作,最后恢复主机从前的ip设置 i=0; while [ "$i" != "$LineNumber" ] do n=$i+1 echo "ifconfig $1 inet ${ip_array[`echo $n`]} netmask ${netmask_array[`echo $n`]} broadcast ${broadcast_array[`echo $n`]}" ifconfig $1 inet ${ip_array[`echo $n`]} netmask ${netmask_array[`echo $n`]} broadcast ${broadcast_array[`echo $n`]} route add default 210.77.79.254 #在这里添加要执行操作的代码 i=$i+1 done #最后恢复为原来的设置 ifconfig $1 inet $inet_ip netmask $inet_netmask broadcast $inet_broadcast route add default 210.77.68.25

你可能感兴趣的:(脚本程序)