关于JAVA中使用nbtstat获取地址报错

原创 2016年06月01日 00:07:17

在JAVA后台想要通过ip地址获得局域网内客户机的MAC地址
最初也是从网上找的例子,用到这条语句:
Process process = Runtime.getRuntime().exec("nbtstat -a " + sip);

但是在运行时报错:

 java.io.IOException: Cannot run program "nbtstat": CreateProcess error=2,????

除了命令语句的格式错误和权限问题,
网上找到原因之一是windows 64位系统的问题

试了一下 在32位系统写:
“cmd /c C:\Windows\system32\nbtstat.exe -a 192.168.44.1”
是可以执行的,但是在64位系统中是无法调用的。改成
“cmd /c C:\Windows\sysnative\nbtstat.exe -a 192.168.44.1”
就可以了。
所以把最开始的命令语句改为

Runtime r = Runtime.getRuntime();
            String scancmd="nbtstat -A ";   
            File file = new File("C:\\Windows\\SysWOW64"); //此文件夹只在64位系统中存在    32位系统中只有System32
            if(file.exists()){ 
            scancmd = "c:\\Windows\\sysnative\\nbtstat.exe -A "; 
            } 
            Process p = r.exec(scancmd+ip);
            InputStreamReader isr = new InputStreamReader(p.getInputStream());

如此 问题解决。至于为何用到这两个文件夹,大家可以看下这篇文章 64位Win7系统nbtstat 问题 虽然我没看太明白。

相关文章推荐

java环境报错大全下载地址

  • 2013年08月10日 10:04
  • 195B
  • 下载

idea 地址正确 sendRedirect和getRequestDispatcher报错,java.lang.IllegalStateException

今天写了一个最简单的Servlet 一直报错,显示请求重定向sendRedirect一直报错,找出原因后真的想骂人java.lang.IllegalStateException at org....

nbtstat及netstat命令---查对方IP mac地址 根据IP查对方计算机名

知道ip版权保护,请不要随意复制^%#$32364)98sa。^_^,想知道是谁的主机(主机的计算机名是实名制)。 版权保护版权保护,请不要随意复制^%#$32364)98sa。^_^,请不要随意复制...

nbtstat 指令详解 及其 如何通过计算机名获取ip实战

nbtstat: 假设 我们  通过net view 获取了 局域网内一些计算机名           如上标红的计算机名称 如何 才能获取计算机的ip呢? 接下来使用  nbtstat ...

java学习——使用Eclipse进行单元测试,报错Can't allocate jvmti memory

工具环境:Windows+Eclipse+Jdk1.7 项目框架: Spring+SpringMVC + Hibernate在使用Eclipse进行单元测试的时候运行后,没有成功!并且控制台输出报错...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于JAVA中使用nbtstat获取地址报错
举报原因:
原因补充:

(最多只允许输入30个字)