hdcpc

来源:互联网 发布:网络布线是做什么的 编辑:程序博客网 时间:2024/06/07 05:15
IP配置规则:如果配置静态IP,那么DNS也需要是静态的。如果IP是动态的,DNS可以是动态也可静态。
使用udhcpc工具,作用是:向局域网dhcp服务器(udhcpd工具)请求分配IP($ip),广播地址($broadcast),子网掩码($subnet),网关($router),网卡接口($interface),域名($domain)如180.97.33.108 www.baidu.com,域名服务器地址($dns)如:202.96.128.166 202.96.134.133 127.0.1.1;。
如果这些信息获得了,配置IP的方法就是:
$IFCONFIG $interface $ip broadcast $broadcast netmask $subnet
$ROUTE add default gw $router
ifconfig eth0 192.168.75.100 broadcast 192.168.75.255 netmask 255.255.255.0    配置IP,广播地址,和子网掩码。子网掩码这里表示可以有256个client。
route add default gw 192.168.75.1    网管不是用ifconfig来配置的

配置DNS:打开/etc/resolv.conf就可以看到dns信息:
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 202.96.128.166
nameserver 202.96.134.133
nameserver 127.0.1.1
因此如果我们要配置dns的话就直接填进这里面即可:
RESOLV_CONF="/etc/resolv.conf"
    if [ -n "$domain" ]; then
        #返回域名如:180.97.33.108 www.baidu.com
        echo domain $domain >> $RESOLV_CONF
        echo $domain > $DOMAIN_BAK
    fi
    for i in $dns ; do
        echo adding dns $i
        #注意dns返回来的DNS只有IP,前面要加:nameserver
        echo nameserver $i >> $RESOLV_CONF
        #这里是备份。
        echo $i >> $DNS_BAK
    done


脚本:
dhcpc_eth_start()
{
    cp $dbgmode_file $tmp_dir/udhcpc_eth0.result
        #killall udhcpc
    ###########在dhcp请求包中包含myhostname信息。
    myhostname=`cat /proc/sys/kernel/hostname`
#################使用udhcpc来配置########################-t发送120个discover数据包(lease),-q获得配置退出,-n没有立即获得动态IP立即错误退出,-V设置供应商,-s发送事件执行shell文件,-i指定网卡,-x在发送包中包含OPT=hostname:内容是$myhostname。详情看:man udhcpc.中udhcpc部分。##################
    /sbin/udhcpc -t 120 -q -n -V Vendor -s $DHCP_PATH/udhcpc_callbak.script -i $arg_ifname -x hostname:$myhostname
#################$?返回上条语句的返回值。
    if [ "$?" -eq "0" ] && [ -f $UDHCPC_FULL_SUCCESS_FILE ]; then
    #if [ "$?" -eq "0" -a -f $UDHCPC_FULL_SUCCESS_FILE ]; then
        echo "#ETH0_DHCP_SUCCESS" > /tmp/cmdpipe
################-e表示解释\
        echo -e "success\n" > $dhcpstatus_file
        else
        echo "#ETH0_DHCP_FAIL" > /tmp/cmdpipe
        echo -e "fail\n" > $dhcpstatus_file
        fi
        wait
    #####
    #echo "#ETH0_DHCP_SUCCESS" > /tmp/aeicmdpipe
    echo -e "success\n" > $dhcpstatus_file
}

####################################################
#################################udhcpc_callbak.script:
####################################################
#!/bin/sh
# udhcpc script edited by Jason Lee

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1
RESOLV_CONF="/etc/resolv.conf"
DHCP_OK="/var/lock/dhcp_full.ok"
DHCP_OK2="/var/lock/dhcp."
DNS_BAK="/usr/local/etc/dns.bak"
DOMAIN_BAK="/usr/local/etc/domain.bak"

[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"
[ -n "$subnet" ] && NETMASK="netmask $subnet"

case "$1" in
        deconfig)
#################这是默认配置,如果lease失败(http://lists.busybox.net/pipermail/uclibc/2006-January/034854.html)了,进入,配置IP重新发送。应该就是/sbin/ifconfig $interface 0.0.0.0和/sbin/route add -net 0.0.0.0 netmask 0.0.0.0 $interface
                #modified by yuyu
                #/sbin/ifconfig $interface 0.0.0.0
                rm -f $DHCP_OK
                ip2=$(($RANDOM%253+1))
                ip3=$(($RANDOM%253+1))
                /sbin/ifconfig $interface 169.254.$ip2.$ip3
                echo "ifconfig $interface 169.254.$ip2.$ip3"
                /sbin/route add -net 0.0.0.0 netmask 0.0.0.0 $interface
                echo "route add -net 0.0.0.0 netmask 0.0.0.0 $interface"
                #end modified
                ;;
                
        renew|bound)
##################获得成功,这里配置/sbin/ifconfig $interface $ip $BROADCAST $NETMASK和/sbin/route add -net $router netmask $subnet $interface,但是有可能broadcast和subnet没有。
                #/sbin/ifconfig $interface $ip $BROADCAST $NETMASK
                set > /tmp/udhcpc_eth0.result
                #Added by yuyu
                #/sbin/route add -net 169.254.0.0 netmask 255.255.0.0 $interface
                #end add
                #/sbin/route del default
                #/sbin/route add default gw $router
                echo $router > /tmp/gateway.result
                echo $ip > /tmp/ip.result
                if [ -n "$broadcast" ]; then
#######################################可能broadcast,subnet没有
                        echo "---The broadcast $broadcast---"
                        echo $broadcast > /tmp/broadcast.result
                fi
                if [ -n "$subnet" ]; then
                        echo "---The netmask $subnet---"
                        echo $subnet > /tmp/netmask.result
                fi                
                echo "---The gateway $router---"

                echo -n > $DNS_BAK
                echo -n > $RESOLV_CONF
                echo -n > $DOMAIN_BAK
                if [ -n "$domain" ]; then
                        echo domain $domain >> $RESOLV_CONF
                        echo $domain > $DOMAIN_BAK
                fi
                for i in $dns ; do
                        echo adding dns $i
                        echo nameserver $i >> $RESOLV_CONF
                        echo $i >> $DNS_BAK
                done
                echo ok > $DHCP_OK
                echo ok > $DHCP_OK2$interface
                ;;
esac

exit 0


上面是用udhcpc来请求dhcp服务器请求ip地址等,然后调用callback脚本来执行配置ip和dns。如果我们使用的是静态ip和DNS不用配置,可以去dhcp服务器拿domain过来。如果ip和dns都动态,配置。如果ip动态dns静态,配置ip和domain就好了。一般domain不会返回回来。
0 0
原创粉丝点击