udhcpc命令

由于要使用网络通讯,所以不可避免的要用到dhcp。理想的网络通讯方式是下面3种都要支持:

  1,接入已有网络。这便要求可以作为dhcp客户端。

  2,作为DHCP服务器,动态分配IP

  3,指定固定IP

  第3种情况没有什么好说的,简单说下前2种情况。

  使用步骤:

  (1)在内核的网络项里面把DHCP配置上;

  (2)在busybox里面把[*]udhcp server(udhcpd)

  [*]udhcp client(udhcpc)都选上。

  udhcpd就是终端设备作为DHCP服务器

  udhcpc就是终端设备作为DHCP客户端

  busybox里面对dhcp都已经给出例子了,

  [zhh@localhost busybox-1.14.1]$ ls ./examples/udhcp/

  sample.bound  sample.deconfig  sample.nak  sample.renew  sample.script  simple.script  udhcpd.conf

  比如使用udhcpc

  就可以直接把simple.script拿来使用,改不改名字都可以,busybox里面默认的目录文件是/usr/share/udhcpc/default.script

  可以查看下帮助

  # udhcpc --help

  BusyBox v1.14.1 (2010-01-22 10:35:16 CST) multi-call binary

  Usage: udhcpc [-Cfbnqtvo] [-c CID] [-V VCLS] [-H HOSTNAME] [-i INTERFACE]

  [-p pidfile] [-r IP] [-s script] [-O dhcp-option]... [-P N]

  -V CLASSID      Vendor class identifier

  -i INTERFACE    Interface to use (default: eth0)

  -H,-h HOSTNAME  Client hostname

  -c CLIENTID     Client identifier

  -C              Suppress default client identifier

  -p file         Create pidfile

  -r IP           IP address to request

  -s file         Run file at DHCP events (default /usr/share/udhcpc/default.script)

  -t N            Send up to N request packets

  -T N            Try to get a lease for N seconds (default 3)

  -A N            Wait N seconds (default 20) after failure

  -O OPT          Request DHCP option OPT (cumulative)

  -o              Do not request any options (unless -O is also given)

  -f              Run in foreground

  -b              Background if lease is not immediately obtained

  -S              Log to syslog too

  -n              Exit with failure if lease is not immediately obtained

  -q              Quit after obtaining lease

  -R              Release IP on quit

  -P N            Use port N instead of default 68

  -a              Use arping to validate offered address

  #

  这样就很好理解了。

  下面就说说使用udhcpd,同样可以直接把busybox自带的udhcpd.conf作为参考,怎么设置该文件就不详述了,去参考相关文档即可。看看udhcpd怎么使用

  # udhcpd --help

  BusyBox v1.14.1 (2010-01-22 10:35:16 CST) multi-call binary

  Usage: udhcpd [-fS] [-P N] [configfile]

  DHCP server

  -f      Run in foreground

  -S      Log to syslog too

  -P N    Use port N instead of default 67

  帮助一目了然。

  我使用的时候直接

  #udhcpd /etc/udhcpd.conf

  即可。

  还有一个租约文件要简要说说,使用udhcpd时会要求建立一个租约文件,按照提示创建一个就行了,它起什么作用呢?就是为了记录客户端所获得的IP,如果没有租约文件,则会重新给客户端分配一个新IP,如果有,则使用原先分配的IP

 

例如:udhcpc -i wlan0是获取wlan0ip地址,如果想获取之后直接退出,添加 -q参数,即:udhcpc -q -i wlan0

 

udhcpc切换到后台:

它自带参数可以实现该功能。如下:

   udhcpc -b -i eth0 -p /var/run/udhcpc.pid -R

解释一下,-b就是切换到后台指令,-i是指定使用哪个网络接口,双网卡的时候一定要使用它来指定eth0  or  eth1

对于 -R参数,其实也很重要,在关闭udhcpc时,可以向dhcpserver发送release取消租约。

 

udhcpc scripts

Here's some debian scripts I wrote for udhcpc 0.9.6. I wanted to make it easy to run local scripts for DHCP changes so I created /etc/udhcpc.d. All the /usr/share/udhcpc/default.* scripts have been merged into /etc/udhcpc.d/S50default. S99local is an example script that patches resolv.conf and calls a DNS update script.

/etc/init.d/udhcpc

/etc/udhcpc.script

/etc/udhcpc.d/S50default

/etc/udhcpc.d/S99local

 

http://udhcp.busybox.net/README.udhcpc

udhcp client (udhcpc)

--------------------


The udhcp client negotiates a lease with the DHCP server and notifies

a set of scripts when a leases is obtained or lost.



command line options

-------------------


The command line options for the udhcp client are:


-c, --clientid=CLIENTID Client identifier

-H, --hostname=HOSTNAME Client hostname

-h, Alias for -H

-f, --foreground Do not fork after getting lease

-b, --background Fork to background if lease cannot be

immediately negotiated.

-i, --interface=INTERFACE Interface to use (default: eth0)

-n, --now Exit with failure if lease cannot be

immediately negotiated.

-p, --pidfile=file Store process ID of daemon in file

-q, --quit Quit after obtaining lease

-r, --request=IP IP address to request (default: none)

-s, --script=file Run file at dhcp events (default:

/usr/share/udhcpc/default.script)

-v, --version Display version



If the requested IP address cannot be obtained, the client accepts the

address that the server offers.



udhcp client scripts

-------------------


When an event occurs, udhcpc calls the action script. The script by

default is /usr/share/udhcpc/default.script but this can be changed via 

the command line arguments. The three possible arguments to the script 

are:


deconfig: This argument is used when udhcpc starts, and

when a leases is lost. The script should put the interface in an

up, but deconfigured state, ie: ifconfig $interface 0.0.0.0.


bound: This argument is used when udhcpc moves from an

unbound, to a bound state. All of the paramaters are set in

enviromental variables, The script should configure the interface,

and set any other relavent parameters (default gateway, dns server, 

etc).


renew: This argument is used when a DHCP lease is renewed. All of

the paramaters are set in enviromental variables. This argument is

used when the interface is already configured, so the IP address,

will not change, however, the other DHCP paramaters, such as the

default gateway, subnet mask, and dns server may change.


nak: This argument is used with udhcpc receives a NAK message.

The script with the deconfig argument will be called directly

afterwards, so no changes to the network interface are neccessary.

This hook is provided for purely informational purposes (the

message option may contain a reason for the NAK).


The paramaters for enviromental variables are as follows:


$HOME - The set $HOME env or "/"

$PATH - the set $PATH env or "/bin:/usr/bin:/sbin:/usr/sbin"

$1 - What action the script should perform

interface - The interface this was obtained on

ip - The obtained IP

siaddr - The bootp next server option

sname - The bootp server name option

boot_file - The bootp boot file option

subnet - The assigend subnet mask

timezone - Offset in seconds from UTC

router - A list of routers

timesvr - A list of time servers

namesvr - A list of IEN 116 name servers

dns - A list of DNS server

logsvr - A list of MIT-LCS UDP log servers

cookiesvr - A list of RFC 865 cookie servers

lprsvr - A list of LPR servers

hostname - The assigned hostname

bootsize - The length in 512 octect blocks of the bootfile

domain - The domain name of the network

swapsvr - The IP address of the client's swap server

rootpath - The path name of the client's root disk

ipttl - The TTL to use for this network

mtu - The MTU to use for this network

broadcast - The broadcast address for this network

ntpsrv - A list of NTP servers

wins - A list of WINS servers

lease - The lease time, in seconds

dhcptype - DHCP message type (safely ignored)

serverid - The IP of the server

message - Reason for a DHCPNAK

tftp - The TFTP server name

bootfile - The bootfile name


additional options are easily added in options.c.



note on udhcpc's random seed

---------------------------


udhcpc will seed its random number generator (used for generating xid's)

by reading /dev/urandom. If you have a lot of embedded systems on the same

network, with no entropy, you can either seed /dev/urandom by a method of

your own, or doing the following on startup:


ifconfig eth0 > /dev/urandom


in order to seed /dev/urandom with some data (mac address) unique to your

system. If reading /dev/urandom fails, udhcpc will fall back to its old

behavior of seeding with time(0).



signals accepted by udhcpc

-------------------------


udhcpc also responds to SIGUSR1 and SIGUSR2. SIGUSR1 will force a renew state,

and SIGUSR2 will force a release of the current lease, and cause udhcpc to

go into an inactive state (until it is killed, or receives a SIGUSR1). You do

not need to sleep between sending signals, as signals received are processed

sequencially in the order they are received.



compile time options

-------------------


options.c contains a set of dhcp options for the client:


name[10]: The name of the option as it will appear in scripts


flags: The type of option, as well as if it will be requested

by the client (OPTION_REQ)


code: The DHCP code for this option







 实现DHCP自动获取IP地址 

分类: LINUX


前提:系统已经实现DNS(即使用pingwww.baidu.com测试时能ping通)。

1 在内核中添加以下选项:

Networking  --->

   [*] Networking support  

      Networking options  ---> 

          <* > Packet socket                 //添加.配置CONFIG_PACKET

          [ * ]     IP: DHCP support         //添加

          [ * ] Network packet filtering (replaces ipchains)  --->    //添加,后面子选项可不选,配置CONFIG_NETFILTER

说明:若没选<* > Packet socket, [ * ] Network packet filtering (replaces ipchains)  --->选项,在执行udhcpc命令时出现如下错误:

~ # udhcpc

udhcpc (v0.9.9-pre) started

udhcpc[208]: udhcpc (v0.9.9-pre) started

 

FATAL: couldn't listen on socket, Address family not supported by protocol

udhcpc[208]: FATAL: couldn't listen on socket, Address family not supported by protocol

2  Busybox中添加以下选项:

Networking Utilities  --->

   udhcp Server/Client  --->

        [] udhcp Server (udhcpd)       //在此不作服务端,故不选。生成udhcpd命令                             

        [*] udhcp Client (udhcpc)       //生成udhcpc命令                               

        [ ] Lease display utility (dumpleases)                        

        [ ]   Log udhcp messages to syslog (instead of stdout)        

        [ ]   Compile udhcp with noisy debugging messages

busybox没编译相应选项,也可从网上下载相应文件,用arm-linux交叉编译得到udhcpd,udhcpc命令copyusr/sbin下就可以了。

我从 网上  下的udhcp_0.9.8cvs20050303.orig.tar.gz文件

解压后修改Makefile文件

19行添加CROSS_COMPILE=arm-linux-  

注释12行的COMBINED_BINARY=1,否则不生成udhcpc命令。

3 建相关配置文件

busyboxexamples/udhcp/copy  simple.script文件到开发板/usr/share/udhcpc/下,并重命名为default.scriptudhcp_0.9.8cvs20050303.orig.tar.gz中也有这样的文件。

[root@localhost root]# vi usr/share/udhcpc/default.script

#!/bin/sh

 

# udhcpc script edited by Tim Riker <Tim@Rikers.org>

 

[ -z "$1" ] && echo "Error: should be called from udhcpc" && exit 1

 

RESOLV_CONF="/etc/resolv.conf"

[ -n "$broadcast" ] && BROADCAST="broadcast $broadcast"

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

 

case "$1" in

        deconfig)

                /sbin/ifconfig $interface 0.0.0.0

                ;;

 

        renew|bound)

                /sbin/ifconfig $interface $ip $BROADCAST $NETMASK

 

                if [ -n "$router" ] ; then

                        echo "deleting routers"

                        while route del default gw 0.0.0.0 dev $interface ; do

                                :

                        done

                        for i in $router ; do

                                route add default gw $i dev $interface

                        done

                fi

 

                echo -n > $RESOLV_CONF

                [ -n "$domain" ] && echo search $domain >> $RESOLV_CONF

                for i in $dns ; do

                        echo adding dns $i

                        echo nameserver $i >> $RESOLV_CONF

                done

                ;;

esac

 

exit 0

 

4 重启开发板,执行udhcpc就可自动获取IP地址了,以下是执行udhcpc的输出信息:

 

~ # udhcpc

udhcpc (v0.9.9-pre) started

udhcpc[228]: udhcpc (v0.9.9-pre) started

 

Sending discover...

udhcpc[228]: Sending discover...

 

Sending select for 192.168.1.109...

udhcpc[228]: Sending select for 192.168.1.109...

 

Lease of 192.168.1.109 obtained, lease time 86400

udhcpc[228]: Lease of 192.168.1.109 obtained, lease time 86400

 

deleting routers

route: SIOC[ADD|DEL]RT: No such process

adding dns 192.168.0.1

~ # ping www.baidu.com

PING www.a.shifen.com (220.181.38.4): 56 data bytes

64 bytes from 220.181.38.4: icmp_seq=0 ttl=52 time=1219.0 ms

[1] + Stopped                    ping www.baidu.com

 

5 如果是双网卡必须用参数指明

例:udhcpc  -i  eth1 






 Linuxhostshost.confresolv.conf的区别

分类: LINUX


这三个文件都位于 /etc/目录下,在这里区分一下

1.hosts文件.

Windows系统下的host的文件相类似,就是一个文本文件,里面存放一些IP和域名的对应关系。

2.host.conf. #解析器查询顺序配置文件

例:vi /etc/host.conf

order hosts bind 表示先查询本地hosts文件,如果没有结果,再尝试查找BIND dns服务器。

3. resolv.conf

配置Linux系统DNS服务器的配置文件:

vi /etc/resolv.conf

nameserver 192.168.0.1

nameserver 202.99.96.68




本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/383281.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

c++的STL--1概念通述

STL的概念 什么是STL? STL(standard template libaray-标准模板库)&#xff1a;是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且 是一个包罗数据结构与算法的软件框架。 STL从广义上分为&#xff1a;容器(container)&#xff0c;算法(algorit…

socket通信和异常处理札记

Linux socket通信出现CLOSE_WAIT状态的原因与解决方法 这个问题之前没有怎么留意过&#xff0c;是最近在面试过程中遇到的一个问题&#xff0c;面了两家公司&#xff0c;两家公司竟然都面到到了这个问题&#xff0c;不得不使我开始关注这个问题。说起CLOSE_WAIT状态&#xff0c…

mac 下使用wireshark监听网络上的数据

分三个步骤&#xff1a; 1.wireshark安装 wireshark运行需要mac上安装X11&#xff0c;mac 10.8的系统上默认是没有X11的。先去http://xquartz.macosforge.org/landing/下载最新的 xquartz安装&#xff0c;安装好就有X11了。 wireshark的下载&#xff0c;网…

c++的vector容器

vector容器概念 vector是表示可变大小数组的序列容器。就像数组一样&#xff0c;vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素 进行访问&#xff0c;和数组一样高效。但是又不像数组&#xff0c;它的大小是可以动态改变的&#xff0c;而且它…

嵌入式Linux下3G USB Modem的使用

busybox中需打开&#xff1a;wc&#xff0c;pidof&#xff1b; busybox中shell下打开getopts 百度搜索“Serial connection established. using channel 1”包含大量问题解答 2013-12-22 0个评论 收藏 我要投稿 一.ARM-Linux ARM-Linux-2.6.17 3G USB Modem:hu…

新一代数据库技术

新一代非关系型数据库有以下5个主要类型&#xff1a; 面向文件存储&#xff1a;适用于存储海量文件&#xff0c;代表产品MongoDb 列存储(wide column store/column-family)数据库&#xff1a;快速查找相关数据&#xff0c;相关数据被放在同一列中&#xff0c;代表产品Cassandra…

c++中stack容器

Stack 简介 stack 是堆栈容器&#xff0c;是一种“先进后出”的容器。stack 是简单地装饰 deque 容器而成为另外的一种容器。#include stack没有迭代器 Stack所有元素的进出都必须符合“先进后出”的条件&#xff0c;只有stack顶端的元素&#xff0c;才有机会被外界取用&am…

详解udev

如果你使用Linux比较长时间了&#xff0c;那你就知道&#xff0c;在对待设备文件这块&#xff0c;Linux改变了几次策略。在Linux早期&#xff0c;设备文件仅仅是是一些带有适当的属性集的普通文件&#xff0c;它由mknod命令创建&#xff0c;文件存放在/dev目录下。后来&#xf…

c++中的queue容器

queue容器 队列是一种容器适配器&#xff0c;专门用于在FIFO上下文(先进先出)中操作&#xff0c;其中从容器一端插入元素&#xff0c;另一端 提取元素。 队列作为容器适配器实现&#xff0c;容器适配器即将特定容器类封装作为其底层容器类&#xff0c;queue提供一组特定的 成员…

NAU8810相关问题

1.ADC和DAC有什么区别&#xff1f; 不&#xff0c;这不是一个“愚弄人的”问题或脑筋急转弯&#xff0c;并且我认为我们的读者都非常清楚模数转换器(ADC)及数模转换器(DAC)的基本功能。 但在如何使用这些转换器以及人们的认知度上也存在着哲理性区别。用最简单的话讲&#xff0…

c++中list容器

list概念 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向 其前一个元素和后一个元素。list与for…

Linux中rc的含义

在Linux中&#xff0c;最为常用的缩略语也许是“rc”&#xff0c;它是“runcomm”的缩写――即名词“run command”(运行命令)的简写。rc”是任何脚本类文件的后缀&#xff0c;这些脚本通常在程序的启动阶段被调用&#xff0c;通常是Linux系统启动时。如/etc/rc&#xff08;连接…

c++中的set容器和multiset容器

set容器基本概念 set的特性是&#xff0c;所有元素都会根据元素的键值自动被排序。set的元素不像map那样可以同时拥有实值和键值&#xff0c;set的元素即是键值又是实值。set不允许两个元素又相同的键值。我们不可以通过set的迭代器改变set元素的值&#xff0c;因为set元素值就…

linux下的僵尸进程处理SIGCHLD信号

什么是僵尸进程&#xff1f; 首先内核会释放终止进程(调用了exit系统调用)所使用的所有存储区&#xff0c;关闭所有打开的文件等&#xff0c;但内核为每一个终止子进程保存了一定量的信息。这些信息至少包括进程ID&#xff0c;进程的终止状态&#xff0c;以及该进程使用的CPU时…

c++中的map容器

map/multimap基本概念 Map的特性是&#xff0c;所有元素都会根据元素的键值自动排序。Map所有的元素都是pair&#xff0c;同时拥有实值和键值&#xff0c;pair的第一元素被视为键值&#xff0c;第二元素被视为实值&#xff0c;map不允许两个元素有相同的键值我们可以通过map的…

mknod指令详解

mknod - make block or character special files mknod [OPTION]... NAME TYPE [MAJOR MINOR] option 有用的就是 -m 了 name 自定义 type 有 b 和 c 还有 p 主设备号 次设备号 主设备号是由linux/major.h定义的&#xff0c;如下定义了一个DOC设备&am…

c++中容器(STL)的共性与使用的时机

容器的共通能力 C模板是容器的概念 理论提高&#xff1a;所有容器提供的都是值&#xff08;value&#xff09;语意&#xff0c;而非引用&#xff08;reference&#xff09;语意。容器执 行插入元素的操作时&#xff0c;内部实施拷贝动作。所以 STL 容器内存储的元素必须能够被…

Qt Creator 窗体控件自适应窗口大小布局

常见的软件窗口大小改变&#xff08;最大化、手动改变时&#xff09;需要窗口的部件能够自适应布局&#xff0c;而在Qt的应用程序界面设计中&#xff0c;对于像我一样的初学者如何实现窗口自适应调整还是要绕点弯路的。网上百度了很多&#xff0c;多数说的很含糊&#xff0c;还…

c++中利用STL实现公司员工分组问题

#include<iostream>using namespace std; #include<vector> #include<string> #include<map> #include<ctime> /* 公司招聘了5个员工&#xff0c;5名员工进入公司之后&#xff0c;需要指派员工在那个部门工作 的人员信息&#xff1a;姓名 年龄 电…

c++中STL的常用算法--1(函数对象,谓词,内建函数对象)

函数对象 重载函数调用操作符的类&#xff0c;其对象常称为函数对象&#xff08;function object&#xff09;&#xff0c;即它们是行为类似函数的对象&#xff0c;也叫仿函数&#xff08;functor&#xff09;&#xff0c;其实就是重载"()"操作符&#xff0c;使得类…