如何使用udhcpc获取动态IP
本文是为了提供给百问网wiki使用而编辑的!同步发表到个人博客
udhcpc是一个动态分配IP的指令,使用这个指令我们可以为开发板动态的获得一个IP。
1. 正确的进行硬件连接
首先要明确一个概念,路由器和交换机,能动态分配IP的是路由器,而交换机是不能进行动态IP的分配的,所以如果想使用动态分配IP的功能,请确保开发板已经连接到一个路由器而不是交换机(或者开发板连接到交换机之后,交换机的某一个端口连接到了路由器的lan口)如果是使用单独的交换机的话 则需要设置固定的IP。
2 .使用串口登录到开发板
正确的连接串口线和开发板,确保能使用串口登录到开发板并且输入命令。
3.打开网卡
如果需要某个网口获得动态IP,则需要将这个网口使能(默认情况下网卡0已经使能,网卡1 为使能)
可以使用以下指令查看网卡的使能状态。
[root@ebf6ull:/etc]# ifconfig
eth0 Link encap:Ethernet HWaddr B6:74:53:97:D3:32
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::b474:53ff:fe97:d332/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1380 errors:0 dropped:0 overruns:0 frame:0
TX packets:468 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:296205 (289.2 KiB) TX bytes:37792 (36.9 KiB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
如上图所示 显示的是只有一个网卡使能。如果需要使能网卡1
[root@ebf6ull:/etc]# ifconfig eth1 up
[23220.804681] Micrel KSZ8081 or KSZ8091 20b4000.ethernet-1:02: attached PHY driver [Micrel KSZ8081 or KSZ8091] (mii_bus:phy_addr=20b4000.ethernet-1:02, irq=-1)
[23220.819375] IPv6: ADDRCONF(NETDEV_UP): eth1: link is not ready
[root@ebf6ull:/etc]# ifconfig
eth0 Link encap:Ethernet HWaddr B6:74:53:97:D3:32
inet addr:192.168.1.101 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::b474:53ff:fe97:d332/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1451 errors:0 dropped:0 overruns:0 frame:0
TX packets:485 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:305108 (297.9 KiB) TX bytes:38506 (37.6 KiB)
eth1 Link encap:Ethernet HWaddr C6:80:EA:BE:35:7F
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
[root@ebf6ull:/etc]#
此时两个网卡都已经使能,如果此时接上网线并且连接到路由器,指定网口的灯应该是黄色常亮的状态。
4.获取动态IP
[root@ebf6ull:/etc]# udhcpc
udhcpc: started, v1.29.3
udhcpc: sending discover
udhcpc: sending select for 192.168.1.101
udhcpc: lease of 192.168.1.101 obtained, lease time 7200
deleting routers
adding dns 202.96.134.33
adding dns 202.96.128.166
[root@ebf6ull:/etc]#
至此开发板已经获得了动态的IP地址。 此处不建议将获得动态IP的指令加入到开机启动项中,笔者曾加入过但是 因为没接网线,导致整个系统一直卡在获取动态IP的代码段!建议使用配置路由器的IP 段的方式将某一段IP 隔离(动态分配永远不会分配到这一段的IP,例如将动态分配的起始地址设置为192.168.1.10)
然后在开发板的启动脚本中加入设置固定IP 的代码段,去给开发板设置一个固定的IP。 此处不细说。
[root@ebf6ull:/etc]# ifconfig eth0 192.168.1.111
[root@ebf6ull:/etc]# ifconfig
eth0 Link encap:Ethernet HWaddr B6:74:53:97:D3:32
inet addr:192.168.1.111 Bcast:192.168.1.255 Mask:255.255.255.0
inet6 addr: fe80::b474:53ff:fe97:d332/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1574 errors:0 dropped:0 overruns:0 frame:0
TX packets:519 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:314286 (306.9 KiB) TX bytes:40534 (39.5 KiB)
eth1 Link encap:Ethernet HWaddr C6:80:EA:BE:35:7F
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
可以将下面代码段加入到/etc/init.d/rcS中去
ifconfig eth0 192.168.1.111