android 手机局域网扫描PC机;
利用android的ping命令扫描局域网内所有ip,
并对其进行socket通信
import java.io.DataInputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.Socket;
import java.net.SocketException;
import java.util.Enumeration;
import org.apache.http.conn.util.InetAddressUtils;
import android.annotation.SuppressLint;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.widget.Toast;
public class NetTool {
   
   
  private int SERVERPORT = 8888;
   
  private String locAddress;//存储本机ip,例:本地ip :192.168.1.
   
  private Runtime run = Runtime.getRuntime();//获取当前运行环境,来执行ping,相当于windows的cmd
   
  private Process proc = null;
   
  private String ping = "ping -c 1 -w 0.5 " ;//其中 -c 1为发送的次数,-w 表示发送后等待响应的时间
   
  private int j;//存放ip最后一位地址 0-255
   
  private Context ctx;//上下文
   
  public NetTool(Context ctx){
    this.ctx = ctx;
  }
  private Handler handler = new Handler(){
     
    public void dispatchMessage(Message msg) {
      switch (msg.what) {
       
      case 222:// 服务器消息
        break;
         
      case 333:// 扫描完毕消息
        Toast.makeText(ctx, "扫描到主机:"+((String)msg.obj).substring(6), Toast.LENGTH_LONG).show();
         
        break;
      case 444://扫描失败
        Toast.makeText(ctx, (String)msg.obj, Toast.LENGTH_LONG).show();
        break;
      }
    }
  };
   
  //向serversocket发送消息
  public String sendMsg(String ip,String msg) {
     
    String res = null;
    Socket socket = null;
     
    try {
      socket = new Socket(ip, SERVERPORT);
      //向服务器发送消息
      PrintWriter os = new PrintWriter(socket.getOutputStream());
      os.println(msg);
      os.flush();// 刷新输出流,使Server马上收到该字符串
       
      //从服务器获取返回消息
      DataInputStream input = new DataInputStream(socket.getInputStream()); 
      res = input.readUTF();
      System.out.println("server 返回信息:" + res);
      Message.obtain(handler, 222, res).sendToTarget();//发送服务器返回消息
    } catch (Exception unknownHost) {
      System.out.println("You are trying to connect to an unknown host!");
    } finally {
      // 4: Closing connection
      try {
        if (socket != null) {
          socket.close();
        }
      } catch (IOException ioException) {
        ioException.printStackTrace();
      }
    }
    return res;
  }
   
  /**
   * 扫描局域网内ip,找到对应服务器
   */
  public void scan(){
     
    locAddress = getLocAddrIndex();//获取本地ip前缀
     
    if(locAddress.equals("")){
      Toast.makeText(ctx, "扫描失败,请检查wifi网络", Toast.LENGTH_LONG).show();
      return ;
    }
     
    for ( int i = 0; i < 256; i++) {//创建256个线程分别去ping
       
      j = i ;
       
      new Thread(new Runnable() {
         
        public void run() {
           
          String p = NetTool.this.ping + locAddress + NetTool.this.j ;
           
          String current_ip = locAddress+ NetTool.this.j;
           
          try {
            proc = run.exec(p);
             
            int result = proc.waitFor();
            if (result == 0) {
              System.out.println("连接成功" + current_ip);
              // 向服务器发送验证信息
              String msg = sendMsg(current_ip,"scan"+getLocAddress()+" ( "+android.os.Build.MODEL+" ) ");
               
              //如果验证通过...
              if (msg != null){
                if (msg.contains("OK")){
                  System.out.println("服务器IP:" + msg.substring(8,msg.length()));
                  Message.obtain(handler, 333, msg.substring(2,msg.length())).sendToTarget();//返回扫描完毕消息
                }
              }
            } else {
               
            }
          } catch (IOException e1) {
            e1.printStackTrace();
          } catch (InterruptedException e2) {
            e2.printStackTrace();
          } finally {
            proc.destroy();
          }
        }
      }).start();
       
    }
     
  }
   
  //获取本地ip地址
  public String getLocAddress(){
     
    String ipaddress = "";
     
    try {
      Enumeration<networkinterface> en = NetworkInterface.getNetworkInterfaces();
      // 遍历所用的网络接口
      while (en.hasMoreElements()) {
        NetworkInterface networks = en.nextElement();
        // 得到每一个网络接口绑定的所有ip
        Enumeration<inetaddress> address = networks.getInetAddresses();
        // 遍历每一个接口绑定的所有ip
        while (address.hasMoreElements()) {
          InetAddress ip = address.nextElement();
          if (!ip.isLoopbackAddress()
              && InetAddressUtils.isIPv4Address(ip.getHostAddress())) {
            ipaddress = ip.getHostAddress();
          }
        }
      }
    } catch (SocketException e) {
      Log.e("", "获取本地ip地址失败");
      e.printStackTrace();
    }
     
    System.out.println("本机IP:" + ipaddress);
     
    return ipaddress;
  }
   
  //获取IP前缀
  public String getLocAddrIndex(){
     
    String str = getLocAddress();
     
    if(!str.equals("")){
      return str.substring(0,str.lastIndexOf(".")+1);
    }
     
    return null;
  }
   
  //获取本机设备名称
  public String getLocDeviceName() {
     
    return android.os.Build.MODEL;
     
  }
   
   
}
</inetaddress></networkinterface>

Android获取局域网所有设备的ip地址相关推荐

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

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

  2. 微课--Python获取局域网内所有机器IP地址与MAC地址

    开学第一课:一定不要这样问老师Python问题 董付国老师Python系列教材推荐与选用参考 3000道Python习题免费在线练习 ============== 版权声明:由于公众号后台规则问题,本 ...

  3. 如何查找局域网中设备的IP

    ---恢复内容开始--- 在玩转Raspberry Pi以及以后自己搭建平台的过程中,难免要查找局域网中的设备的IP地址,现在就为大家梳理一下常用的几种方法: 1.通过360路由器卫士等路由器监控设备 ...

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

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

  5. Android获取AP热点IP,获取连接到本机AP热点设备的IP地址

    Android系统是基于Linux的,所连接的设备的一些信息保存在了  /proc/net/arp 文件中. 下面直接上我编写的程序,当前手机开启AP后,点击按钮直接获取连接到本热点的IP,然后显示在 ...

  6. Python # 扫描端口功能 # 获取网卡的Mac地址 # 局域网扫描器IP地址和MAC地址,获取网卡名称和其ip地址

    #!/usr/bin/env python # -*- coding: utf-8 -*- # 开发人员: # time: 2021-09-07 20:37 # 开发工具: PyCharm # Ver ...

  7. 几种查询局域网内在线弱电设备IP地址的方法,总有一款你会用的到

    方法一:通过电脑cmd命令查询局域网内设备IP 在电脑开始菜单[运行],输入cmd回车,在弹出的命令提示窗口输入ipconfig/all回车,能够查看本机的IP.网关.mac地址信息. 然后在命令提示 ...

  8. 通过mac地址找设备的IP地址

    通过mac地址找设备的IP地址 linux系统中工作,经常需要远程登陆到远端设备进行一些配置等操作.在局域网中,如果连接着多个设备,通常情况下这些设备都是使用DHCP获得IP地址实现联网的.如果要远程 ...

  9. 获取用户电脑的上网IP地址

    在项目中经常要获取用户的上网的IP地址,如何获取用户的IP地址,方法很多,现在介绍以下2种. /// <summary>         /// 获取本机在局域网的IP地址         ...

最新文章

  1. 【C++】 二叉树的基本知识及其遍历
  2. Memcached安装和基本使用
  3. CentOS安装Mysql8各种坑。。。
  4. elasticsearch java对象 驼峰原则_Elasticsearch简介与实战
  5. 200道物理学难题——038蚱蜢跃树
  6. 计算机管理关机在哪,电脑点了关机为什么却关不了
  7. java:去除字符串中空格 、 oracle (+) 、 mysql中数值运算符和函数
  8. 高速信号传输约翰逊 pdf_高速串口技术如何突破板级连接限制
  9. HDU.1008 Elevator
  10. JScrollPane恢复正常滚动量
  11. 水往地处流,人往地处走
  12. 十大排序算法——计数排序(C语言)
  13. 概率论——分布函数的性质
  14. 【动画消消乐】HTML+CSS 自定义加载动画:清新折叠方块效果 063(附源码及原理详解)
  15. 7月1号连连支付不能提现PayPal了,以后PayPal怎样提现?
  16. 大数据笔记--Hadoop(第五篇)
  17. 网站死链接检测以及死链接的处理方式
  18. robots文件对网站优化有哪些作用
  19. RabbitMQ之Channel
  20. 发生系统错误 67,找不到网络名

热门文章

  1. 【水果识别】柑橘质量检测及分级系统(带面板)【含GUI Matlab源码 1628期】
  2. 在Ubuntu中使用Tomcat的小tips_codestorm_新浪博客
  3. 计算机怎么升级64位操作系统,如何将计算机的32位更改为64位
  4. 【Javascript 基础】课堂笔记1
  5. 解二元微分通解和特解的关系,量子力学中的奇异点分析与高数中通解与特解的关系
  6. linux启动分区丢,Linux装机因为分区丢失引导解决办法
  7. ActivityNet 2018介绍
  8. 小学五年级计算机课评课,小学数学五年级下册公开课《分数的意义》听课心得体会评课稿...
  9. 计算机科学期刊是b类吗,《计算机科学》体例格式
  10. 人脸和身份证不匹配_人脸识别身份信息不匹配是什么意思