创建类UdpGetClientMacAddr.java

package com.shuzhiqiang.common;import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;/*** 主机A向主机B发送“UDP-NetBIOS-NS”询问包,即向主机B的137端口,发Query包来询问主机B的NetBIOS Names信息。* 其次,主机B接收到“UDP-NetBIOS-NS”询问包,假设主机B正确安装了NetBIOS服务........... 而且137端口开放,则主机B会向主机A发送一个“UDP-NetBIOS-NS”应答包,即发Answer包给主机A。* 并利用UDP(NetBIOS Name Service)来快速获取远程主机MAC地址的方法*/
public class UdpGetClientMacAddr {private String sRemoteAddr;private int iRemotePort = 137;private byte[] buffer = new byte[1024];private DatagramSocket ds = null;public UdpGetClientMacAddr(String strAddr) throws Exception {sRemoteAddr = strAddr;ds = new DatagramSocket();}public final DatagramPacket send(final byte[] bytes) throws IOException {DatagramPacket dp = new DatagramPacket(bytes, bytes.length, InetAddress.getByName(sRemoteAddr), iRemotePort);ds.send(dp);return dp;}public final DatagramPacket receive() throws Exception {DatagramPacket dp = new DatagramPacket(buffer, buffer.length);ds.receive(dp);return dp;}public byte[] GetQueryCmd() throws Exception {byte[] t_ns = new byte[50];t_ns[0] = 0x00;t_ns[1] = 0x00;t_ns[2] = 0x00;t_ns[3] = 0x10;t_ns[4] = 0x00;t_ns[5] = 0x01;t_ns[6] = 0x00;t_ns[7] = 0x00;t_ns[8] = 0x00;t_ns[9] = 0x00;t_ns[10] = 0x00;t_ns[11] = 0x00;t_ns[12] = 0x20;t_ns[13] = 0x43;t_ns[14] = 0x4B;for (int i = 15; i < 45; i++) {t_ns[i] = 0x41;}t_ns[45] = 0x00;t_ns[46] = 0x00;t_ns[47] = 0x21;t_ns[48] = 0x00;t_ns[49] = 0x01;return t_ns;}public final String GetMacAddr(byte[] brevdata) throws Exception {// 获取计算机名int i = brevdata[56] * 18 + 56;String sAddr = "";StringBuffer sb = new StringBuffer(17);// 先从第56字节位置,读出Number Of Names(NetBIOS名字的个数,其中每个NetBIOS Names Info部分占18个字节)// 然后可计算出“Unit ID”字段的位置=56+Number Of Names×18,最后从该位置起连续读取6个字节,就是目的主机的MAC地址。for (int j = 1; j < 7; j++) {sAddr = Integer.toHexString(0xFF & brevdata[i + j]);if (sAddr.length() < 2) {sb.append(0);}sb.append(sAddr.toUpperCase());if (j < 6) sb.append(':');}return sb.toString();}public final void close() throws Exception {ds.close();}public final String GetRemoteMacAddr() throws Exception {byte[] bqcmd = GetQueryCmd();send(bqcmd);DatagramPacket dp = receive();String smac = GetMacAddr(dp.getData());close();return smac;}public static void main(String args[]) throws Exception {
//        UdpGetClientMacAddr umac = new UdpGetClientMacAddr("127.0.0.1");UdpGetClientMacAddr umac  = new UdpGetClientMacAddr("192.168.2.32");System.out.println(umac.GetRemoteMacAddr());}
}

用GetMacController.java实现restful接口调用获取MAC地址返回值

package com.shuzhiqiang.controller;import com.shuzhiqiang.common.ReturnCodes;
import com.shuzhiqiang.common.UdpGetClientMacAddr;
import com.shuzhiqiang.util.Response;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;@RequestMapping("/getMac")
@Controller
public class GetMacController {/*获取本地mac地址*/@RequestMapping("/local")@ResponseBodypublic Object local(@RequestParam(name = "ip", defaultValue = "127.0.0.1") String ip) throws Exception {UdpGetClientMacAddr mac = new UdpGetClientMacAddr(ip);String macAddress = mac.GetRemoteMacAddr();Response response = new Response(ReturnCodes.success, macAddress);return response;}//测试----------------------------------------public static void main(String[] args) throws Exception {UdpGetClientMacAddr mac = new UdpGetClientMacAddr("192.168.2.32");//UdpGetClientMacAddr mac = new UdpGetClientMacAddr("192.168.2.25");System.out.println(mac.GetRemoteMacAddr());}
}

JAVA获取局域网内对应IP电脑的MAC地址(物理地址)相关推荐

  1. Android 获取局域网内网IP地址

    Android 获取局域网内网IP地址 废话 上代码 完事 废话 拿局域网IP一般用在tcp通讯或udp通讯上,下次再整理下这类通讯的框架 上代码 /*** 网络工具* 获得局域网IP地址* @aut ...

  2. Java获取局域网中所有ip和Mac地址

    Java获取局域网中所有ip和Mac地址 定义一个Util public class IpAndMacUtil {/*** 获取本机Mac地址* @param ia* @return* @throws ...

  3. java获取局域网内主机,java怎么获取局域网内所有主机ip

    java怎么获取局域网内所有主机ip 关注:53  答案:2  mip版 解决时间 2021-01-27 21:31 提问者夢岭杺 2021-01-27 12:02 java怎么获取局域网内所有主机i ...

  4. 网络安全——局域网内网络防范手段(MAC地址攻击、ARP攻击、DHCP攻击)

    今天给大家介绍一下局域网内的网络攻击手段的防范手段.主要是依托华为交换机和路由器配置,介绍MAC地址攻击.ARP攻击.DHCP攻击等攻击的防范.本文会把华为交换机系列防御配置命令进行介绍,适合对局域网 ...

  5. python Scapy获取局域网内的IP和mac地址

    ''' python3 安装scapy-python3 注:linux,可能需要以root登陆,避免出现permission error Scapy还包含内建函数arping(),该函数实现的功能和以 ...

  6. java获取局域网IP

    需要遍历局域网IP的,大体分为两步:: 1.得到局域网网段,可由自己机器的IP来确定 2.根据IP类型,一次遍历局域网内IP地址 我给你一个JAVA类,编译之后直接运行便可以得到局域网内所有IP,具体 ...

  7. Python获取局域网内所有机器IP地址与网卡MAC地址

    已发相关文章请参考Python获取本机所有网卡的MAC地址 本文代码使用ARP协议获取局域网内所有计算机的IP地址与MAC地址,思路是使用系统命令arp获取ARP表并生成文本文件,然后从文件中读取和解 ...

  8. java如何获得内网ip、外网ip、以及如何根据ip查询地址

    今天突发奇想地想要用java写一个小的工具类. 用来实现如何获得本机的内网ip,外网ip和根据ip获得相应的地址. 花了几个小时才弄清,然后整理了一下,希望有用. 首先要明白以下三种ip地址的区别: ...

  9. 使用 NetworkInterface 获得本机在局域网内的 IP 地址

    转载于: https://segmentfault.com/a/1190000007462741 1.问题提出 在使用 Java 开发网络程序时,有时候我们需要知道本机在局域网中的 IP 地址.很常见 ...

最新文章

  1. 2020年有寓意的领证日期_2020年有意义谐音的领证日子 容易记住的领证日期
  2. 1040 Longest Symmetric String (25 分)_15行代码AC
  3. Ubuntu使用VNC运行基于Docker的桌面系统
  4. javascript面向对象编程实现[定义(静态)属性方法--继承]
  5. python正则表达式怎么看_python如何使用正则表达式
  6. c语言如何引用参数,关于exec:如何在C语言中使用适当的参数调用execl()?
  7. rabbitmq 更细致的过滤
  8. POJ_2456_Agressive_cows_(二分,最大化最小值)
  9. 洛谷p3392计算机教育新社会,洛谷-P3392 涂国旗
  10. 使用JDBC+JSP分层实现新闻管理系统注册、登录功能
  11. IT人员应该掌握的30种技能
  12. java 读取文件成字节数组_java读取文件为字节数组
  13. 案例丨长江今年1号洪水平稳通过 金仓助力三峡工程防洪保电
  14. 我的世界 Java1.12.2联机下载_我的世界1.12.2
  15. 随机游走模型 matlab,随机游走的matlab实现
  16. 历届试题 大臣的旅费 java
  17. python支持wps_python启动办公软件进程(word、excel、ppt、以及wps的et、wps、wpp)
  18. 查看jenkins端口linux,Jenkins修改端口号(成功率高)
  19. 真正意义上能够全部抓取昵图网全站图片
  20. Android Studio 实现跑马灯微项目实例

热门文章

  1. Spark-Spark setMaster WordCount Demo
  2. commander.js
  3. C语言计算e1 1/1! 1/2!,c语言程序填空 下面程序是计算sum=1+(1+1/2)+(1+1/2+1/3)+…(1+1/2...
  4. c语言括号匹配的检验,检验括号匹配的算法
  5. WCF服务端返回:(413) Request Entity Too Large
  6. BNUOJ 52305 Around the World 树形dp
  7. 12.27评论5位同学试验三
  8. 如何使用JPA注解标注多对多的关系
  9. 如何设置REUSE_ALV_GRID_DISPLAY'的单个单元格的是否可以输入
  10. 【目标检测】yolo系列:从yolov1到yolov5之YOLOv5训练自己数据集(v6.0)