Android获取局域网所有设备的ip地址
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地址相关推荐
- Python获取局域网内所有机器IP地址与网卡MAC地址
已发相关文章请参考Python获取本机所有网卡的MAC地址 本文代码使用ARP协议获取局域网内所有计算机的IP地址与MAC地址,思路是使用系统命令arp获取ARP表并生成文本文件,然后从文件中读取和解 ...
- 微课--Python获取局域网内所有机器IP地址与MAC地址
开学第一课:一定不要这样问老师Python问题 董付国老师Python系列教材推荐与选用参考 3000道Python习题免费在线练习 ============== 版权声明:由于公众号后台规则问题,本 ...
- 如何查找局域网中设备的IP
---恢复内容开始--- 在玩转Raspberry Pi以及以后自己搭建平台的过程中,难免要查找局域网中的设备的IP地址,现在就为大家梳理一下常用的几种方法: 1.通过360路由器卫士等路由器监控设备 ...
- Android 获取局域网内网IP地址
Android 获取局域网内网IP地址 废话 上代码 完事 废话 拿局域网IP一般用在tcp通讯或udp通讯上,下次再整理下这类通讯的框架 上代码 /*** 网络工具* 获得局域网IP地址* @aut ...
- Android获取AP热点IP,获取连接到本机AP热点设备的IP地址
Android系统是基于Linux的,所连接的设备的一些信息保存在了 /proc/net/arp 文件中. 下面直接上我编写的程序,当前手机开启AP后,点击按钮直接获取连接到本热点的IP,然后显示在 ...
- Python # 扫描端口功能 # 获取网卡的Mac地址 # 局域网扫描器IP地址和MAC地址,获取网卡名称和其ip地址
#!/usr/bin/env python # -*- coding: utf-8 -*- # 开发人员: # time: 2021-09-07 20:37 # 开发工具: PyCharm # Ver ...
- 几种查询局域网内在线弱电设备IP地址的方法,总有一款你会用的到
方法一:通过电脑cmd命令查询局域网内设备IP 在电脑开始菜单[运行],输入cmd回车,在弹出的命令提示窗口输入ipconfig/all回车,能够查看本机的IP.网关.mac地址信息. 然后在命令提示 ...
- 通过mac地址找设备的IP地址
通过mac地址找设备的IP地址 linux系统中工作,经常需要远程登陆到远端设备进行一些配置等操作.在局域网中,如果连接着多个设备,通常情况下这些设备都是使用DHCP获得IP地址实现联网的.如果要远程 ...
- 获取用户电脑的上网IP地址
在项目中经常要获取用户的上网的IP地址,如何获取用户的IP地址,方法很多,现在介绍以下2种. /// <summary> /// 获取本机在局域网的IP地址 ...
最新文章
- 【C++】 二叉树的基本知识及其遍历
- Memcached安装和基本使用
- CentOS安装Mysql8各种坑。。。
- elasticsearch java对象 驼峰原则_Elasticsearch简介与实战
- 200道物理学难题——038蚱蜢跃树
- 计算机管理关机在哪,电脑点了关机为什么却关不了
- java:去除字符串中空格 、 oracle (+) 、 mysql中数值运算符和函数
- 高速信号传输约翰逊 pdf_高速串口技术如何突破板级连接限制
- HDU.1008 Elevator
- JScrollPane恢复正常滚动量
- 水往地处流,人往地处走
- 十大排序算法——计数排序(C语言)
- 概率论——分布函数的性质
- 【动画消消乐】HTML+CSS 自定义加载动画:清新折叠方块效果 063(附源码及原理详解)
- 7月1号连连支付不能提现PayPal了,以后PayPal怎样提现?
- 大数据笔记--Hadoop(第五篇)
- 网站死链接检测以及死链接的处理方式
- robots文件对网站优化有哪些作用
- RabbitMQ之Channel
- 发生系统错误 67,找不到网络名
热门文章
- 【水果识别】柑橘质量检测及分级系统(带面板)【含GUI Matlab源码 1628期】
- 在Ubuntu中使用Tomcat的小tips_codestorm_新浪博客
- 计算机怎么升级64位操作系统,如何将计算机的32位更改为64位
- 【Javascript 基础】课堂笔记1
- 解二元微分通解和特解的关系,量子力学中的奇异点分析与高数中通解与特解的关系
- linux启动分区丢,Linux装机因为分区丢失引导解决办法
- ActivityNet 2018介绍
- 小学五年级计算机课评课,小学数学五年级下册公开课《分数的意义》听课心得体会评课稿...
- 计算机科学期刊是b类吗,《计算机科学》体例格式
- 人脸和身份证不匹配_人脸识别身份信息不匹配是什么意思