利用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. python进阶-第二季第一章
  2. 在Windows上以服务方式运行 MSOPenTech/Redis
  3. Java POI 导出EXCEL经典实现 Java导出Excel
  4. 简单解决Ubuntu修改locale的问题
  5. Ubuntu下deb与rpm包的安装方法
  6. centos 下安装mysql
  7. payload的使 常用xss_Sony某个深度子域上的XSS
  8. 基础Git操作与GitHub协作吐血整理,收好!| 原力计划
  9. 数据结构上机实践第八周项目6- 猴子选大王(数组版)
  10. spring - ioc和aop
  11. MySQL灾备恢复在线主从复制变成主主复制及多源复制【转】
  12. Python 必备要点总结及环境搭建(上)
  13. oracle序列不连续,Oracle不连续的值,如何实现查找上一条、下一条
  14. cuda10安装_Mmdetection的安装和使用
  15. 解压版tomcat安装配置
  16. 【思维导图】旅行物品清单
  17. Linux驱动——mmc sd card初始化流程(十一)
  18. java-php-python-ssm校园易购二手交易平台计算机毕业设计
  19. 第四十九回 七星坛诸葛祭风  三江口周瑜纵火
  20. 管理业务流程图_业务流程管理采用方案

热门文章

  1. csp-s模拟测试54 - 55
  2. Oracle 设置密码永不过期
  3. 2023年汽车智能座舱十大发展趋势
  4. NYOJ12,喷水装置(二)
  5. scp 拉取ssh连接服务器的文件
  6. 新手学习eclipse使用
  7. 智慧家——全家具功能
  8. 原理.001.电话工作原理
  9. JAVA Hashset求集合的交集并集差集
  10. PHP 交集 并集 差集