利用UDP(NetBIOS Name Service)来快速获取远程主机MAC地址的方法

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("172.19.1.198");umac=new UdpGetClientMacAddr("192.168.16.83");System.out.println(umac.GetRemoteMacAddr());}
}

利用UDP(NetBIOS Name Service)来快速获取远程主机MAC地址的方法相关推荐

  1. 获取客户端mac地址 php,js获取客户端mac地址的方法

    首先声明,此篇文章纯属标题党.今日QQ群里探讨用JS获取客户端mac地址的方法,众说纷纭,有说行有说不行的,闲着没事儿研究了一下,js确实可以获取到客户端当前电脑的mac地址,代码如下,但这段代码放到 ...

  2. 720获取蓝牙MAC地址的方法

    1.打开蓝牙相关AT指令 2.输入ATBp=1可以看到蓝牙初始化过程中会打印蓝牙MAC地址信息 3.根据AT指令代码,在menuconfig中打开蓝牙相关选项 4.创建全局变量,调用ble_app_i ...

  3. android获取wifi mac地址吗,Android 获取WIFI MAC地址的方法

    1. 经常用法,调用Android的API:WifiManager WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SER ...

  4. ble mac地址 协议_BLE获取iphone mac地址的方法--【sky原创】

    标签: 本人用的BLE是TIcc2541,1.3.2协议栈 1.首先要说明的是,iphone手机将信息保护了,BLE设备读到的iphone地址是随机的,每次连接都会不同 2.下面我就具体说明如何查看手 ...

  5. android+手机mac地址,Android 获取手机Mac地址,手机名称

    /** * 获取手机mac地址 * 错误返回12个0 */ public static String getMacAddress(Context context) { // 获取mac地址: Stri ...

  6. JS快速获取图片宽高的方法

    JS快速获取图片宽高的方法 快速获取图片的宽高其实是为了预先做好排版样式布局做准备,通过快速获取图片宽高的方法比onload方法要节省很多时间,甚至一分钟以上都有可能,并且这种方法适用主流浏览器包括I ...

  7. Win7电脑快速获取超级管理员权限的方法

    Win7系统中经常需要超级管理员权限才能删除文件,否则就会提示"需要管理员权限".那么Win7电脑如何快速获取超级管理员权限Win7电脑如何快速获取超级管理员权限?这里就有小编来告 ...

  8. java获取本地mac地址

    如何用java代码获取本地mac地址呢? 我们可以通过cmd命令:ipconfig -all  来查看我们电脑上的mac地址是多少. 目录 一.自定义方法获取本地mac地址 二.利用第三方工具类获取本 ...

  9. android 获取设备的mac地址,Android编程获取设备MAC地址的实现方法

    本文实例讲述了Android编程获取设备MAC地址的实现方法.分享给大家供大家参考,具体如下: /** * 获取设备的mac地址 * * @param ac * @param callback * 成 ...

最新文章

  1. VGG16迁移学习实现
  2. WDS系列--Windows Deployment Services概述篇
  3. 多媒体技术 PI 第一期:OSS 圆桌预告
  4. Java:File.separator作用相当于 ‘ \ ‘
  5. Vue第一部分(5):计算属性和过滤器
  6. solutions for 'No Suitable Driver Found For Jdbc'
  7. Puppet的安装部署
  8. 用于语音识别的数据增强
  9. spring 连数据库的配置文件
  10. [前端随笔][Javascript][物理引擎] 给元素添加简单的物理属性
  11. 【元胞自动机】基于matlab元胞自动机交通流仿真【含Matlab源码 827期】
  12. matlab中cell2mat的作用,Matlab中cell2mat的使用
  13. ios怎么引入masonry_iOS-Masonry的简单使用
  14. Matplotlib 可视化必备神书,附pdf下载
  15. Python菜鸟编程第十四课之正则表达式
  16. 傅里叶变换与傅里叶级数理解
  17. java 某字段重复的数据库,excel表格两个字段去重复的数据库【用JAVA程序向SQL数据库导入Excel表,判断出SQL表中已存在的重复数据,并跳过重复的继续导入其他记录.】...
  18. 微信小程序正则表达式截取_微信小程序实现简单input正则表达式验证功能示例...
  19. 记工信部列入黑名单的域名释放后可以重新注册的jeeace.com使用记录
  20. python画五角星

热门文章

  1. 2022年全球市场封闭式药物转移系统总体规模、主要企业、主要地区、产品和应用细分研究报告
  2. 在docker中安装宝塔
  3. 八个步骤开发完整的J2EE解决方案
  4. 攻防演练之战前扫雷:漏洞管理的5大措施
  5. linux 常见问题记录
  6. 老人、孩子和Linux
  7. 多元融合通信+可视指挥调度平台VMS/smarteye,支持SIP语音网关PBX与4G/5G执法记录仪、智能安全帽等视频终端的互联互通
  8. Bootstrap基础--选项卡
  9. Python调用笔记本摄像头,并实现人脸检测功能
  10. 计算机显示屏对比度怎么调整,显示器的亮度和对比度多少合适?显示器亮度对比度调多少眼睛舒服?...