您的位置:首页 > 运维架构 > Shell

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

2009-02-03 12:01 330 查看
年前写过一个自动投票的小程序,因为对方的网站限制为一个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
=`head -n $n $2 | tail -n 1 | awk '{print $1}'`
    netmask_array
=`head -n $n $2 | tail -n 1 | awk '{print $2}'`
    broadcast_array
=`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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: