-
2021-05-28 05:45:45
准备工作 一部Androd手机 一台电脑 局域网
使用USB数据线将手机连接到电脑上 其次安装驱动 驱动可以使用手机助手进行安装 比如应用宝 360之类的。
给Android SDK的adb工具配置环境变量 (当然 也可以不进行配置在执行命令的时候指定目录也可以)
使用cmd输入指令 adb devices 查看已连接的设备 可以看到已经连接上电脑的设备
这时候进行重定向端口的操作 指令:adb tcpip 5555
指令操作成功之后 这时候已经可以断开USB连接了 接下来查看手机在局域网中的IP地址
电脑使用cmd指令 adb connect ip地址 连接手机的IP地址
如果不进行重定向端口的话 是无法连接上的 会被手机终端拒绝连接
连接上之后 就可以在开发工具当中查看到该设备 可以在该设备上安装软件
并且重定向成功一次后 只要没有调用kill-server指令 以后局域网连接手机是不需要再重定向端口的
连接成功后 可以为Android设备安装软件 和卸载软件 关机 或 重启 都可以做到
常见adb指令:
adb install apk路径 /安装apk文件
adb uninstall apk包名 /卸载apk文件
/启动指定应用
adb shell am start -n 包名/包名+入口Activity
adb kill-server /关闭adb的服务
adb reboot 重新启动
adb reboot recovery 重新启动到recovery
adb reboot bootloader 重新启动到bootloader
更多相关内容 -
局域网的连接设备.rar
2022-02-22 18:12:14局域网的连接设备.rar -
局域网的连接设备.doc
2021-11-28 19:49:08局域网的连接设备.doc -
局域网的连接设备.pdf
2021-11-09 10:30:08局域网的连接设备.pdf -
局域网的连接设备借鉴.pdf
2022-03-06 02:42:05局域网的连接设备借鉴.pdf -
局域网连接设备.pdf
2021-10-26 02:31:52局域网连接设备.pdf -
局域网android设备发现功能,包括udp发现和蓝牙发现,可进行连接通信
2018-11-13 00:22:32局域网android设备发现功能,包括udp发现和蓝牙发现,可进行连接通信 [注:本内容来自网络,在此分享仅为帮助有需要的网友,如果侵犯了您的权利,麻烦联系我,我会第一时间删除,谢谢您。] -
局域网连接设备资料.pdf
2022-02-25 21:42:46局域网连接设备资料.pdf -
局域网连接设备可用.pdf
2022-02-05 02:45:45局域网连接设备可用.pdf -
通信与网络中的选择局域网的连接方式
2020-11-04 17:47:50由于大型的企业局域网的覆盖范围极广,因此,必须采用性能优良、功能强大的设备才能保证整个系统稳定、安全、可靠地运行。 选择局域网的连接方式 在确定了局域网的规模后,就要按照局域网中各个节点的位置、... -
获取当前局域网下所有连接设备的ip地址和mac地址
2021-07-03 16:53:18今天我们计划实现通过Python读取当前局域网下所有连接设备的IP地址和Mac地址。 基本原理: 通过ipconfig /all 命令获取局域网所在的网段 通过arp -d *命令清空当前所有的arp映射表 循环遍历当前网段所有可能的ip...大家好,我是小小明。
今天我们使用python调用几个网络操作相关的命令,并基于此做出些小玩具。
学习计划:
- 通过
ipconfig /all
命令获取局域网所在的网段 - 通过
arp -d *
命令清空当前所有的arp映射表 - 循环遍历当前网段所有可能的ip与其ping一遍建立arp映射表
- 通过arp -a命令读取缓存的映射表获取所有与本机连接的设备的Mac地址。
计划实现案例:
- 读取当前局域网网段下所有连接设备的IP地址和Mac地址。
- 分析设备的上下线。
CMD命令
获取本机ip地址和网段
通过
ipconfig /all
命令获取本机ip和局域网所在的网段:C:\Windows\system32>ipconfig /all Windows IP 配置 主机名 . . . . . . . . . . . . . : DESKTOP-IS8QJHF 主 DNS 后缀 . . . . . . . . . . . : 节点类型 . . . . . . . . . . . . : 混合 IP 路由已启用 . . . . . . . . . . : 否 WINS 代理已启用 . . . . . . . . . : 否 以太网适配器 以太网: 连接特定的 DNS 后缀 . . . . . . . : 描述. . . . . . . . . . . . . . . : Realtek PCIe GbE Family Controller 物理地址. . . . . . . . . . . . . : F0-2F-74-82-0F-B0 DHCP 已启用 . . . . . . . . . . . : 是 自动配置已启用. . . . . . . . . . : 是 本地链接 IPv6 地址. . . . . . . . : fe80::4453:3c08:3332:32de%5(首选) IPv4 地址 . . . . . . . . . . . . : 192.168.3.31(首选) 子网掩码 . . . . . . . . . . . . : 255.255.255.0 获得租约的时间 . . . . . . . . . : 2021年7月3日 8:55:32 租约过期的时间 . . . . . . . . . : 2021年7月3日 20:55:31 默认网关. . . . . . . . . . . . . : 192.168.3.1 DHCP 服务器 . . . . . . . . . . . : 192.168.3.1 DHCPv6 IAID . . . . . . . . . . . : 82849652 DHCPv6 客户端 DUID . . . . . . . : 00-01-00-01-27-EC-F1-A5-F0-2F-74-82-0F-B0 DNS 服务器 . . . . . . . . . . . : 101.226.4.6 114.114.114.114 TCPIP 上的 NetBIOS . . . . . . . : 已启用
清空arp映射表
通过
arp -d *
命令清空当前所有的arp映射表:C:\Windows\system32>arp -d * C:\Windows\system32>arp -a 接口: 192.168.3.31 --- 0x5 Internet 地址 物理地址 类型 192.168.3.1 c0-b8-e6-4b-82-cd 动态 224.0.0.22 01-00-5e-00-00-16 静态 239.11.20.1 01-00-5e-0b-14-01 静态 C:\Windows\system32>arp -a 接口: 192.168.3.31 --- 0x5 Internet 地址 物理地址 类型 192.168.3.1 c0-b8-e6-4b-82-cd 动态 192.168.3.22 3c-7c-3f-80-07-d0 动态 224.0.0.22 01-00-5e-00-00-16 静态 239.11.20.1 01-00-5e-0b-14-01 静态
可以看到清空后马上查到的地址不一样。
Ping局域网所有可能的设备
在命令行中我们可以通过如下命令实现:
for /L %i IN (1,1,254) DO ping -w 1 -n 1 192.168.3.%i
192.168.3改成前面查询到的网段。
不过在Python中,我们只需使用python自己的for循环即可。
上述命令执行过程中:
查看当前在线的设备
在将上面命令执行过一遍过,ARP命令便能够查看当前网段内在线的设备:
经实际测试大概只有几秒的延迟便能够感知设备的上线(刚联网的设备会向该网段发送广播),但无法自动感知到设备的下线,除非主动Ping目标ip发现ping不通,目标ip才会从arp表中删除。
Python实现
下面,我们用Python执行这些命令:
- 通过
ipconfig /all
命令获取局域网所在的网段 - 通过
arp -d *
命令清空当前所有的arp映射表 - 循环遍历当前网段所有可能的ip与其ping一遍建立arp映射表
- 通过arp -a命令读取缓存的映射表获取所有与本机连接的设备的Mac地址。
获取局域网所在的网段
以下代码根据系统
ipconfig /all
命令返回的结果进行文本处理:with os.popen("ipconfig /all") as res: for line in res: line = line.strip() if line.startswith("IPv4"): ipv4 = map(int, re.findall("(\d+)\.(\d+)\.(\d+)\.(\d+)", line)[0]) elif line.startswith("子网掩码"): mask = map(int, re.findall("(\d+)\.(\d+)\.(\d+)\.(\d+)", line)[0]) break net_segment = ".".join([str(i & j) for i, j in zip(ipv4, mask)]).strip(".0") net_segment
'192.168.3'
注意:若你的系统执行返回的结果与前面cmd命令的结果不一样,则需要根据实际情况修改代码。
当前我们实际只会使用最后一个位置作为网段,并不需要考虑子网掩码,所有可以简化代码:
with os.popen("ipconfig /all") as res: for line in res: line = line.strip() if line.startswith("IPv4"): net_segment = re.findall("(\d+\.\d+\.\d+)\.\d+", line)[0] break net_segment
'192.168.3'
清空映射表
这步必须具有管理员权限,否则会执行失败:
import os os.system("arp -d *")
Ping局域网所有可能的设备
for i in range(1, 255): os.system(f"ping -w 1 -n 1 {net_segment}.{i}")
不过上述命令耗时2分钟:
感觉太慢了,我们考虑使用多线程并发执行或多进程并行执行实现加速。
对于多进程,经测试在开启5个线程时耗时是30秒,8个线程是28秒:
from concurrent.futures import ThreadPoolExecutor with ThreadPoolExecutor(max_workers=5) as executor: for i in range(1, 255): executor.submit(os.system, f"ping -w 1 -n 1 {net_segment}.{i}")
继续增大线程,并不能明显加快执行速度。
试试多进程:
from concurrent.futures import ProcessPoolExecutor import psutil # 逻辑cpu个数 count = psutil.cpu_count() with ProcessPoolExecutor(count) as executor: for i in range(1, 255): executor.submit(os.system, f"ping -w 1 -n 1 {net_segment}.{i}")
结果耗时31秒,设置4倍的进程数也仅仅只能提升到25秒,与多线程的速度相差不大,不如直接多线程。
结论:使用多线程设置5-8个线程最佳。能由2分钟提升到30秒,直到慢慢达到性能瓶颈。
获取当前在线设备ip和mac地址
通过解析arp命令的结果即可:
header = None with os.popen("arp -a") as res: for line in res: line = line.strip() if not line or line.startswith("接口"): continue if header is None: header = re.split(" {2,}", line.strip()) break df = pd.read_csv(res, sep=" {2,}", names=header, header=0, engine='python') print(df.shape) df.head()
获得36条连接数据:
封装代码
下面我们封装一下上述操作:
import os import re import time from concurrent.futures import ThreadPoolExecutor import pandas as pd def get_net_segment(): with os.popen("arp -a") as res: for line in res: line = line.strip() if line.startswith("接口"): net_segment = re.findall( "(\d+\.\d+\.\d+)\.\d+", line)[0] break return net_segment def clean_arp(): os.system("arp -d *") def ping_net_segment_all(net_segment): # for i in range(1, 255): # os.system(f"ping -w 1 -n 1 {net_segment}.{i}") with ThreadPoolExecutor(max_workers=4) as executor: for i in range(1, 255): executor.submit(os.popen, f"ping -w 1 -n 1 {net_segment}.{i}") def get_arp_ip_mac(): header = None with os.popen("arp -a") as res: for line in res: line = line.strip() if not line or line.startswith("接口"): continue if header is None: header = re.split(" {2,}", line.strip()) break df = pd.read_csv(res, sep=" {2,}", names=header, header=0, engine='python') return df
有了这些方法,我们完成最后的目标:
分析局域网设备上下线
思路
- 程序启动时,扫描本网段所有可能的ip尝试建立连接。
- 获取在线ip地址列表
- 每隔10秒尝试ping一次之前在线的ip,获取下线状态
- 重新获取IP地址列表与前一次对比,获取设备的上下线状态
为了第3条方便实现,我们实现一个方法:
def ping_ip_list(ips, max_workers=4): with ThreadPoolExecutor(max_workers=max_workers) as executor: future_tasks = [] for ip in ips: future_tasks.append(executor.submit(os.popen, f"ping -w 1 -n 1 {ip}")) wait(future_tasks, return_when=ALL_COMPLETED)
逻辑代码
if __name__ == '__main__': # 是否进行初始扫描 init_search = False if init_search: print("正在扫描当前网段所有ip,预计耗时1分钟....") ping_net_segment_all(get_net_segment()) last = None while 1: df = get_arp_ip_mac() df = df.loc[df.类型 == "动态", ["Internet 地址", "物理地址"]] if last is None: print("当前在线的设备:") print(df) else: online = df.loc[~df.物理地址.isin(last.物理地址)] if online.shape[0] > 0: print("新上线设备:") print(online) offline = last[~last.物理地址.isin(df.物理地址)] if offline.shape[0] > 0: print("刚下线设备:") print(offline) time.sleep(5) ping_ip_list(df["Internet 地址"].values) last = df
完整代码
import os import re import time from concurrent.futures import ThreadPoolExecutor, wait, ALL_COMPLETED import pandas as pd def get_net_segment(): with os.popen("arp -a") as res: for line in res: line = line.strip() if line.startswith("接口"): net_segment = re.findall( "(\d+\.\d+\.\d+)\.\d+", line)[0] break return net_segment def ping_net_segment_all(net_segment): # for i in range(1, 255): # os.system(f"ping -w 1 -n 1 {net_segment}.{i}") with ThreadPoolExecutor(max_workers=4) as executor: for i in range(1, 255): executor.submit(os.popen, f"ping -w 1 -n 1 {net_segment}.{i}") def get_arp_ip_mac(): header = None with os.popen("arp -a") as res: for line in res: line = line.strip() if not line or line.startswith("接口"): continue if header is None: header = re.split(" {2,}", line.strip()) break df = pd.read_csv(res, sep=" {2,}", names=header, header=0, engine='python') return df def ping_ip_list(ips, max_workers=4): print("正在扫描在线列表") with ThreadPoolExecutor(max_workers=max_workers) as executor: future_tasks = [] for ip in ips: future_tasks.append(executor.submit(os.popen, f"ping -w 1 -n 1 {ip}")) wait(future_tasks, return_when=ALL_COMPLETED) if __name__ == '__main__': # 是否进行初始扫描 init_search = False if init_search: print("正在扫描当前网段所有ip,预计耗时1分钟....") ping_net_segment_all(get_net_segment()) last = None while 1: df = get_arp_ip_mac() df = df.loc[df.类型 == "动态", ["Internet 地址", "物理地址"]] if last is None: print("当前在线的设备:") print(df) else: online = df.loc[~df.物理地址.isin(last.物理地址)] if online.shape[0] > 0: print("新上线设备:") print(online) offline = last[~last.物理地址.isin(df.物理地址)] if offline.shape[0] > 0: print("刚下线设备:") print(offline) time.sleep(5) ping_ip_list(df["Internet 地址"].values) last = df
结果示例:
当前在线的设备: Internet 地址 物理地址 0 192.168.3.3 3c-7c-3f-83-e2-7c 1 192.168.3.10 3c-7c-3f-80-08-1b 2 192.168.3.25 f0-2f-74-82-15-7e 3 192.168.3.26 f0-2f-74-82-15-a2 4 192.168.3.28 f0-2f-74-82-15-38 5 192.168.3.29 f0-2f-74-82-15-d0 6 192.168.3.32 f0-2f-74-82-15-3b 7 192.168.3.33 f0-2f-74-82-15-56 8 192.168.3.39 a8-5e-45-16-79-99 9 192.168.3.225 30-24-a9-5a-eb-82 新上线设备: Internet 地址 物理地址 9 192.168.3.52 3c-7c-3f-c2-cd-cb 刚下线设备: Internet 地址 物理地址 9 192.168.3.52 3c-7c-3f-c2-cd-cb
- 通过
-
通过局域网对连接的 Android 设备进行调试
2021-01-17 10:55:50电脑开模拟器太慢,直接用手机进行模拟调试,通过局域网连接 Android 设备进行调试使用 USB 数据线将手机连接到电脑上 其次安装驱动(由于调试使用的是小米手机就直接在电脑上安装了小米的驱动)给 Android SDK 的 adb...电脑开模拟器太慢,直接用手机进行模拟调试,通过局域网连接 Android 设备进行调试
使用 USB 数据线将手机连接到电脑上 其次安装驱动(由于调试使用的是小米手机就直接在电脑上安装了小米的驱动)
给 Android SDK 的 adb 工具配置环境变量 (也可以不进行配置在执行命令的时候指定目录也可以)
比如可以直接在我的 Android SDK 的指定目录下
这时候进行重定向端口的操作 指令:adb tcpip 5555
指令操作成功之后 这时候已经可以断开 USB 连接了 接下来查看手机在局域网中的 IP 地址
电脑使用 cmd 指令 adb connect ip 地址 连接手机的 IP 地址
如果不进行重定向端口的话 是无法连接上的 会被手机终端拒绝连接
连接上之后 就可以在开发工具当中查看到该设备 可以查看 DDMS 中找到已经连上的设备可以在该设备上安装软件
并且重定向成功一次后 只要没有调用
-
Python_局域网内已连接设备检测
2020-02-10 15:55:09基于局域网设备管理考虑,查找局域网络内已连接设备,并获取到这些设备的IP地址及设备名称,常用工具有Advanced IP Scanner、Nmap等。 Advanced IP Scanner,是一款可靠且免费的网络扫描分析LAN,该程序可扫描局域...基于局域网设备管理考虑,查找局域网络内已连接设备,并获取到这些设备的IP地址及设备名称,常用工具有Advanced IP Scanner、Nmap等。
Advanced IP Scanner,是一款可靠且免费的网络扫描分析LAN,该程序可扫描局域网络内所有设备,下载链接:https://www.advanced-ip-scanner.com/cn/。
Nmap,也就是Network Mapper,最早是Linux下的网络扫描和嗅探工具包,是一个网络连接端扫描软件,用来扫描网上开放的网络端口,用于网络发现和安全审计的工具,可以检测当前局域网内已连接设备,及目标主机是否在线,端口开放情况,侦测运行的服务类型及版本信息,侦测操作系统与设备类型等信息,下载链接:https://nmap.org/download.html。
Nmap可以在命令行中直接使用,但需要添加环境变量:
在已安装Nmap软件的基础上,通过Python调用nmap、netifaces库,实现局域网内已连接设备的扫描,Python相关库下载地址:https://pypi.org//。(若pip install [package_name]无法使用时,推荐使用该方法)
nmap模块安装:进入已解压路径下,通过命令python setup.py install进行安装。
netifaces模块安装:进入已解压路径下,通过命令python setup.py install进行安装。
使用Python源码如下:
# LanIpScan.py import netifaces import nmap class LanIpScan: # 获取网关 def get_gateways(self): return netifaces.gateways()['default'][netifaces.AF_INET][0] # 获取到本地网关地址,这里返回192.168.1.1 # return dict(dict(netifaces.gateways())['default'])[2][0] # 不推荐使用这种方式,原因是该模块已经定义了一些常量及特定的用法 # 获取IP def get_ip_lists(self, gateway): ip_lists = [] for i in range(1, 256): ip_lists.append('{}{}'.format(gateway[:-1], i)) # 更改网关的最后一项数据并添加到列表中 return ip_lists # 返回列表['192.168.1.1',--> '192.168.1.255'] # 查看IP地址 def scan_ip_survial(self, ip): nmScan = nmap.PortScanner() nmScan.scan(hosts=ip, arguments='-sP') try: nmScan[ip] return {'ScanInfo:': nmScan[ip]} except: KeyError return "此IP地址无效", ip # 获取设备信息 def get_all_devices(self, ip_lists): survial_devices = [] for ip in ip_lists: scan_result = LanIpScan.scan_ip_survial(ip) if scan_result: survial_devices.append(scan_result) print(scan_result) return survial_devices if __name__ == '__main__': LanIpScan = LanIpScan() gateway = LanIpScan.get_gateways() ip_lists = LanIpScan.get_ip_lists(gateway) LanIpScan.get_all_devices(ip_lists)
-
Android 极速获取局域网在线设备信息
2017-05-11 12:23:23Android 单线程获取局域网在线设备,极速刷新arp文件并读取内容 从4分30s 优化到 0.150s -
局域网android设备发现功能
2016-04-26 10:18:13局域网android设备发现功能,包括udp发现和蓝牙发现,可进行连接通信 -
通过局域网(wifi)连接安卓设备,进行调试
2020-09-08 12:21:47第一步:设置端口(此时需要连接线,将手机和电脑相连) 打开命令行(cmd)输入以下代码: adb tcpip 5555 第二步: 连接 adb connect 192.168.0.102(手机IP地址) 出现下图即代表连接成功了。 -
2局域网传输介质和连接设备2012.ppt
2021-12-01 00:44:332局域网传输介质和连接设备2012.ppt -
Android编程实现基于局域网udp广播自动建立socket连接的方法
2021-01-21 19:48:55本文实例讲述了Android编程实现基于局域网udp广播自动建立socket连接的方法。分享给大家供大家参考,具体如下: android开发中经常会用到socket通讯。由于项目需要,最近研究了一下这方面的知识。 需求是想通过wifi... -
Mac扫描局域网内连接设备IP及MAC地址并查看对应IP开放端口
2019-03-24 14:17:37因为有远程调试的需要,所以我需要知道同一局域网内,另一个设备的IP是多少。 好像网上有一个叫nmap的工具也挺专业的,不过我一看到APP Store里面就有一个现成的免费软件,干脆就下载下来试了一下,意外得好用,这里... -
局域网中通过抓ARP包的方式获取网络设备和冲突的设备列表
2020-10-17 15:05:24完成侦测网络中的设备,且获取IP冲突设备的列表。 使用了抓取ARP包的方式。 操作步骤: 1 系统需要安装 WinPcap_4_1_3 2 需要引用 SharpPcap.dll 3 需要引用 PacketDotNet.dll 我把这个抓ARP包的功能做成了一个类,... -
局域网远程连接开启方法步骤
2021-07-03 02:25:40局域网远程连接给我们操控计算机带来方便,用来为远程办公人员、外出人员,以及监视和管理多个部门办公室服务器的系统管理员提供远程网络等,不过许多人还是不会使用,下面小编和你一起看看!局域网开启桌面远程连接... -
局域网查看工具 能够很方便的查阅局域网内部有什么电脑设备连接
2009-09-18 14:06:24能够很方便的查阅局域网内部有什么电脑设备连接 -
C# 获取局域网所有设备IP和MAC
2014-05-03 10:09:56C#:这个例子主要用于获取局域网络所有设备的IP和MAC,代码简单实用,欢迎大家下载实用。 -
Syncthing局域网配置设备连接同步文件
2022-01-31 16:11:26为了加快传输速度,我们需要确保手机和电脑能通过局域网连接。如果无法连接,请按顺序检查以下各项。 0. (可选)关闭Syncthing的全局发现 一、确保wifi设置中的ap隔离是关闭状态 ap隔离会导致同一wifi下的各个设备... -
解析iPad不能正常连接到无线局域网问题
2020-10-24 23:13:15苹果公司的一些iPad用户报告称其很难维持持续的Wi-Fi连接。iPad无线局域网性能问题的原因可能涉及到使用任何Wi-Fi设备所遇到的常见问题也可能涉及到iPad内置Broadcom 802.11n芯片所存在的问题。 -
扫描同一局域网下所有连接设备的IP和MAC
2020-10-19 10:54:11方法一: 用这个博客提供的代码: from scapy.all import ARP, Ether, srp target_ip = "192.168.10.1/24" #"192.168.1.1/24" is a range from "192.168.1.0" to "192.168.1.255", please read more about CIDR ... -
如何访问局域网设备
2020-11-17 10:58:53通过这张图大概就可以明白,就是将局域网的IP地址和端口号和外网的IP地址和端口号对应起来,通过访问外网的IP和端口号,就可以通过内网穿透技术直接访问到局域网的某个IP地址和端口号。 那什内网穿透技术在什么...