java实现DHCP协议获取ip地址
2016-02-14 13:19
931 查看
DHCP是一个局域网的网络协议,使用UDP协议工作,主要有两个用途:给内部网络或网络服务供应商自动分配IP地址,给用户或者内部网络管理员作为对所有计算机作中央管理的手段,在RFC 2131中有详细的描述。
DHCP几个概念:
DHCP Client:DHCP客户端,通过DHCP协议请求IP地址的客户端。DHCP客户端是接口级的概念,如果一个主机有多个以太接口,则该主机上的每个接口都可以配置成一个DHCP 客户端。交换机上每个Vlan接口也可以配置成一个DHCP客户端。
DHCP Server:DHCP 服务端,负责为DHCP客户端提供IP地址,并且负责管理分配的IP地址。
DHCP Relay:DHCP中继器,DHCP客户端跨网段申请IP地址的时候,实现DHCP报文的转发功能。
DHCP Security:DHCP安全特性,实现合法用户IP地址表的管理功能
DHCP Snooping:DHCP监听,记录通过二层设备申请到IP地址的用户信息
DHCP工作原理:
获取物理地址命令 ,有多个物理地址,注意选择正确的地址
工程下载链接
链接: http://pan.baidu.com/s/1dEmbyX7 密码: pu7r
DHCP几个概念:
DHCP Client:DHCP客户端,通过DHCP协议请求IP地址的客户端。DHCP客户端是接口级的概念,如果一个主机有多个以太接口,则该主机上的每个接口都可以配置成一个DHCP 客户端。交换机上每个Vlan接口也可以配置成一个DHCP客户端。
DHCP Server:DHCP 服务端,负责为DHCP客户端提供IP地址,并且负责管理分配的IP地址。
DHCP Relay:DHCP中继器,DHCP客户端跨网段申请IP地址的时候,实现DHCP报文的转发功能。
DHCP Security:DHCP安全特性,实现合法用户IP地址表的管理功能
DHCP Snooping:DHCP监听,记录通过二层设备申请到IP地址的用户信息
DHCP工作原理:
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.util.Random; import org.dhcp4java.DHCPConstants; import org.dhcp4java.DHCPPacket; import org.dhcp4java.HardwareAddress; public class DHCPSnifferTest { // 物理地址. E0-AC-CB-83-35-FA // private static byte[] macAddress = { // (byte) 0xE2, (byte) 0xAC, (byte) 0xCB, (byte) 0x83, (byte) 0x35, (byte) 0xFA // }; public static String bytesToHexString(byte[] src){ StringBuilder stringBuilder = new StringBuilder(); if (src == null || src.length <= 0) { return null; } for (int i = 0; i < src.length; i++) { int v = src[i] & 0xFF; String hv = Integer.toHexString(v); if (hv.length() < 2) { stringBuilder.append(0); } stringBuilder.append(hv); } return stringBuilder.toString(); } public static void main(String[] args) throws SocketException { //修改下面的地址为你的物理地址 使用 ipconfig/all 命令 byte []macAddress=HardwareAddress.getHardwareAddressByString("E0:AC:CB:83:35:FA").getHardwareAddress(); DHCPPacket discover = new DHCPPacket(); discover.setOp(DHCPConstants.DHCPDISCOVER); discover.setHtype(DHCPConstants.HTYPE_ETHER); discover.setHlen((byte) 6); discover.setHops((byte) 0); discover.setXid(123); discover.setSecs((short) 10000); discover.setFlags((short) 0); discover.setChaddr(macAddress); discover.setDHCPMessageType(DHCPConstants.DHCPDISCOVER); DatagramSocket socket = null; try { socket = new DatagramSocket(DHCPConstants.BOOTP_REPLY_PORT); //socket.setSoTimeout(5000); DatagramPacket sendPacket = new DatagramPacket(discover.serialize(), discover.serialize().length, InetAddress.getByName("255.255.255.255"), 67); DatagramPacket pac = new DatagramPacket(new byte[1500], 1500); DHCPPacket dhcp; socket.send(sendPacket); System.out.println("send....."); socket.receive(pac); dhcp = DHCPPacket.getPacket(pac); //返回报文包含macAddress if (bytesToHexString(dhcp.getChaddr()).contains( bytesToHexString(macAddress))) { System.out.println(dhcp); } } catch (IOException e) { try { socket.close(); } catch (Exception e1) { } e.printStackTrace(); } } }
获取物理地址命令 ,有多个物理地址,注意选择正确的地址
工程下载链接
链接: http://pan.baidu.com/s/1dEmbyX7 密码: pu7r
相关文章推荐
- freebsd网卡安装与dhcp配置方法
- PowerShell脚本实现网卡DHCP自动获取IP地址、设置静态IP地址的方法
- DNS、DHCP的备份恢复bat(批处理自动实现)
- linux下的dhcp服务的完全配置(图文详解)
- windows server2008 x64安装DHCP服务器
- 服务器的配置
- windows下的DHCP和中继代理的实验
- 无盘开机获取到dhcp后卡在tftp界面无法继续启动问题
- DHCP 简单搭建 本人初学者 勿喷
- DHCP Snooping + Dynamic ARP Inspection(DAI) 配置
- 华为1821路由器qos car+nat+dhcp+vlan配置心得
- Cisco路由器上配置DHCP全程详解
- 思科路由DHCP设置分析
- Cisco 3550配置DHCP实例
- DHCP工作过程详解
- 【原理总结】DHCP数据包分析
- DHCP 协议概述
- H3C交换机DHCP服务配置命令+详解
- DHCP Snooping的实现