求批处理 自动扫描内网开放5555端口的ip 并运行adb connect ip:5555
for /l %%i in (1,1,255) do adb connect 192.168.1.%%i:5555
做成批处理,放到你adb程序文件夹里运行。
ip地址可改为你自己IP段
什么adb命令会写入应用so文件
如果我们某个APP应用需要某个.so文件,那么可以通过adb push将指定的.so文件推送到指定的路径。
干货|做App测试,那些必知必会的Adb常用命令
本文节选自霍格沃兹测试学院内部教材
为了让大家更好的学习Adb常用命令,我们先从安装Android环境搭建开始讲解哦。
安装jdk
### **
**
**
**
### 因为 Android SDK 是依赖于 java 环境的,所以需要先把 java 的环境搭建好。Java
环境可以参考搭建帖子:
安装Android SDK
###
###
### adb 包含在 Android SDK 平台工具软件包中。具体的 Android SDK
环境搭建步骤请参考帖子:
adb简介
adb 全称为 Android Debug Bridge(Android 调试桥),是 Android SDK 中提供的用于管理 Android
模拟器或真机的工具。
adb 是一种功能强大的命令行工具,可让 PC 端与 Android 设备进行通信。adb 命令可执行各种设备操作,例如安装和调试应用。
adb组成
采用了客户端-服务器(C/S)模型,包括三个部分:
* adb client
* adb server
* adb daemon
ADB client:运行在电脑上,可以在命令行中运行 adb 命令来调用该客户端。Client 本质上就是 Shell,用来发送命令给
Server。发送命令时,首先检测 PC 上有没有启动 Server,如果没有 Server,则会自动启动一个,然后将命令发送到 Server。
ADB server:是运行在电脑上的后台进程,用于管理客户端与运行在模拟器或真机的守护进程通信。
ADB Daemon:守护进程作为一个后台进程在 Android 设备或模拟器系统中运行。它的作用是连接 adb 服务端,并且为运行在主机上的 adb
客户端提供一些服务。
adb工作原理
当 adb 客户端启动时,客户端会先检查 adb 服务端是否启动。如果没有,会先启动服务端进程。adb 服务端在启动后,会与 5037 端口绑定,并监听
adb 客户端发出的命令。
然后,服务端会与所有正在运行的 Android 设备建立连接。它通过扫描 5555 到 5585 之间的奇数号端口查找 Android 设备。服务端一旦发现
Android 设备上的 adb 守护进程在运行,便会与相应的端口建立连接。每个 Android 设备都使用一对端口,偶数端口用于控制台连接,奇数端口用于
adb 连接。
例如:服务端与所有 Android 设备建立连接后,就可以使用 adb 命令来访问这些设备了。服务端会管理已经建立的连接,并处理来自 adb 客户端的命令。
启动adb调试
### Android 真机可以通过 USB 连接到 adb,连接时需要在设备的系统设置中启用 USB 调试(位于开发者选项下),启动 USB
调试后,设备上的 adb 守护进程就会被启动,adb 服务端才可以和设备建立连接。除了用 USB 的方式连接之外,也可以通过 WLAN
的方式连接,这种方式不做赘述。
1. 模拟器:不需要手动设置 USB 调试开关,默认是打开的
2. 真机通过 USB 连接
* 安装 Android 手机驱动
* 设备启用 USB 调试
adb命令格式
*
adb [-d|-e|-s serialNumber] command
* -d:指定当前唯一通过 USB 连接的 Android 设备为命令目标
* -e:指定当前唯一运行的模拟器为命令目标
* -s:指定相应 serialNumber 号的设备/模拟器为命令目标
方括号中的内容是可选的,尖括号内容的是必填的。方括号中参数可以指定设备,关于设备的指定有三个参数可以使用。-d、-e 和 -s,其中使用最多的是 -s
参数,在连接多台设备的时候,一般都是使用 -s 加上设备的序列号这种方式去指定具体设备。
adb 可以同时连接多台设备,但是一次只能对一台设备执行命令。所有连接多台设备的时候,是必须要制定设备,命令才可以执行成功的。
查询设备
把 Android 设备连接到 adb 服务端后,需要确认设备的连接状态。这时可以使用查询命令进行查询。
**连接模拟器** (以 mumu 模拟器为例)
* *
adb connect 127.0.0.1:7555adb devices
* `adb connect` 命令可以通过 WLAN 的方式连接到模拟器,7555 为 mumu 模拟器的端口
* `adb devices` 可以查询设备连接的状态
Windows 系统中,连接模拟器需要先执行 connect 命令去连接模拟器,127.0.0.1 是本地的 IP
地址,因为模拟器就是安装在本地的,所以要使用本地的 IP 地址,加上模拟器本身规定的一个端口号。mumu 的端口号是
7555,如果使用的是其他的模拟器的话,需要先去了解它的端口号是什么,然后再去连接。MacOS 系统中连接模拟器不需要先执行 connect 命令,直接执行
`adb devices` 命令即可。
**连接真机**
**
**
真机直接用 USB 连接到电脑,不需要执行 connect 命令。
直接用 `adb devices`命令查看已经连接的设备列表即可。
feier@ ~ % adb devices
List of devices attached
emulator-5554 device
直接命令后,如果设备已经成功连接,那么设备列表中就会展示已连接设备的信息。以图中的信息为例:
* emualotr-5554:设备序列号
* device:设备连接状态为成功
安装卸载应用
测试过程中,如果需要安装或者卸载应用,可以直接用 adb 命令来操作。
* 普通安装:`adb install apk路径`
* 覆盖安装:`adb install -r apk路径`
* 完全卸载:`adb uninstall 包名`
* 保留配置文件:`adb uninstall -k 包名 `
设备与电脑传输文件
adb 命令支持电脑和 Android 设备之间的文件互传。比如我们需要提取 Android 设备中的日志文件到本地,就可以通过 adb 命令的方式来完成。
* 从电脑上传文件至设备:`adb push 电脑路径 设备路径`
* 从设备复制文件至电脑:`adb pull 设备路径 电脑路径`
日志
打印链接设备的 log 信息
* 屏幕输出日志:`adb logcat`
* 通过标签过滤:`adb logcat -s 标签`
* 显示时间:`adb logcat -v time`
* 输出所有信息:`adb logcat -v long`
* 输出日志到文件:`adb logcat -v time log.txt`
* 清除旧日志信息:`adb logcat -c`
adb shell命令
使用 adb shell 命令相当于远程登录了 Android 系统,可以进入 Android 设备的系统内部。进入系统内部既可以执行一些简单的 Linux
命令也支持很多特有的命令。
使用 adb shell 命令有两种方式。
一种是直接在 adb shell 后面跟上命令。
*
adb [-s serial_number] shell command
比如:
* * * * * * * * * * *
feier@ ~ % adb shell lsacctcachechargerconfigddatadefault.propdevetc...
另一种方式是在设备上启动交互式 shell
*
adb [-s serial_number] shell
进入 shell 之后,再执行对应的命令。
比如我们进入设备内部,可以查看设备内部的目录结构和内容
* * * * * * * * * * *
feier@ ~ % adb shellroot@x86:/ # lsacctcachechargerconfigddatadefault.propdev...
要退出交互式 shell,可以按 Ctrl + D 键或输入 exit。
**Android常用测试命令**
下面整理出了Android常用的一些测试命令及用法。
设备截图/录屏
在测试过程中,如果需要截图或者是录屏,也可以直接使用 adb 命令来完成。
* 截图:`adb shell screencap 设备路径`
* 录屏:`adb shell screenrecord 设备路径`
调用Activity管理器
在 adb shell 中,可以使用 Activity 管理器 (am) 工具发出命令以执行各种系统操作,如启动
Activity、强行停止进程、修改设备屏幕属性,等等。
在测试过程中,如果需要启动 app 或者强制关闭 app,可以通过 adb 命令来实现。
* 启动应用:`adb shell am start -n 包名/Activity名`
* 强制停止应用:`adb shell am force-stop 包名`
调用软件包管理器
在 adb shell 中,可以使用软件包管理器 (pm) 工具发出命令,以对设备上安装的应用软件包执行操作和查询。
如果需要查询设备里都安装了什么应用,就可以使用 adb shell pm list 来查看,还可以加上不同的参数去查看不同类型的应用。而且也可以通过 adb
命令来清除应用相关的数据。
* 显示设备中安装的所有应用:`adb shell pm list packages`
* 只显示系统应用:`adb shell pm list packages -s`
* 只显示第三方应用:`adb shell pm list packages -3`
* 删除与软件包关联的所有数据:`adb shell pm clear 包名`
adb shell dumpsys
dumpsys 是一种在 Android 设备上运行的工具,可提供有关系统服务的信息。可以使用 adb 从命令行调用
dumpsys,获取在连接的设备上运行的所有系统服务的诊断输出。
比如在测试中,如果需要通过 adb 命令启动 app,则需要知道 app 的包名和入口的 Activity
名。这个时候,就可以通过下面这条命令获取到这两个信息。
这个场景,需要先把要获取信息的应用启动,让它在前台运行,然后执行命令
`adb shell dumpsys activity | grep mFocusedActivity`
* * *
feier@ ~ % adb shell dumpsys activity | grep mFocusedActivity mFocusedActivity: ActivityRecord{9dae968 u0 com.xueqiu.android/.common.MainActivity t139}
下方的日志中就会展示出来当前的包名和 Activity 名称。
* 包名:`com.xueqiu.android`
* Activity 名:`.common.MainActivity`
adb shell dumpsys
adb 命令还支持直接获取应用的页面信息。这个页面信息包含了页面中元素的属性,可以方便做自动化测试的时候去定位元素。获取到的页面布局会输出到一个 xml
文件中。
* 当前窗口的 UI 布局简化信息:`adb shell uiautomator dump --compressed`
* *
feier@ ~ % adb shell uiautomator dump --compressedUI hierchary dumped to: /sdcard/window_dump.xml
不指定输出文件路径时,dump 下来的文件默认存储路径为 `/sdcard/window_dump.xml`
可以通过 adb pull 命令把文件传输到电脑中,然后用 uiautomatorviewer 工具打开查看布局。
* 指定输出文件路径:`adb shell uiautomator dump file 设备路径`
adb常用命令就先讲到这里啦,下期我们分享App常见bug解析。大家还想看什么内容的文章也可以留言告诉我们哦!
** _
来霍格沃兹测试开发学社,学习更多软件测试与测试开发的进阶技术,知识点涵盖web自动化测试 app自动化测试、接口自动化测试、测试框架、性能测试、安全测试、持续集成/持续交付/DevOps,测试左移、测试右移、精准测试、测试平台开发、测试管理等内容,课程技术涵盖bash、pytest、junit、selenium、appium、postman、requests、httprunner、jmeter、jenkins、docker、k8s、elk、sonarqube、jacoco、jvm-sandbox等相关技术,全面提升测试开发工程师的技术实力
QQ交流群:484590337
公众号 TestingStudio
视频资料领取:;url=
点击查看更多信息
ADB是什么 ADB常用命令介绍
当我们在给Android手机刷机时,需要ADB工具,不过即使是一些经常刷机的达人,也未必知道ADB是什么意思。如果你想知道ADB是什么,想了解ADB常用命令,下面就给你介绍一下。 ADB的全称为Android Debug Bridge,字面意思就是安卓调试桥接,简单点说,它是Android系统提供的一套工具,通过它,我们可以在电脑上建立一个连接到手机的通道,然后可以在电脑上向手机发送一些指令,完成一些我们需要做的工作。ADB就是起到调试桥的作用。通过ADB我们可以在Eclipse中方面通过DDMS来调试Android程序,说白了就是debug工具。ADB的工作方式比较特殊,采用监听Socket TCP 5554等端口的方式让IDE和Qemu通讯,默认情况下ADB会daemon相关的网络端口,所以当我们运行Eclipse时ADB进程就会自动运行。 ADB是android sdk里的一个工具,用这个工具可以直接操作管理android模拟器或者真实的andriod设备(如G1手机)。 它的主要功能有: * 运行设备的shell(命令行) * 管理模拟器或设备的端口映射 * 计算机和设备之间上传/下载文件 * 将本地apk软件安装至模拟器或android设备 ADB是一个客户端-服务器端程序,其中客户端是你用来操作的电脑,服务器端是android设备。ADB常用的几个命令 1. 查看设备 ADBdevices 这个命令是查看当前连接的设备, 连接到计算机的android设备或者模拟器将会列出显示 2. 安装软件 ADBinstall 这个命令将指定的apk文件安装到设备上 3. 卸载软件 * ADBuninstall 软件名 * ADBuninstall -k 软件名 如果加 -k 参数,为卸载软件但是保留配置和缓存文件. 4. 登录设备shell * ADBshell * ADBshell 这个命令将登录设备的shell.5. 从电脑上发送文件到设备 * ADBpush 本地路径 远程路径 用push命令可以把本机电脑上的文件或者文件夹复制到设备(手机) 6. 从设备上下载文件到电脑 * ADBpull 远程路径 本地路径 用pull命令可以把设备(手机)上的文件或者文件夹复制到本机电脑 7. 显示帮助信息 * ADBhelp 这个命令将显示帮助信息Android端的ADB命令更多 0
渗透测试之端口扫描
端口扫描:端口对应网络服务及应用端程序
服务端程序的漏洞通过端口攻入
发现开放的端口
更具体的攻击面
UDP端口扫描:
如果收到ICMP端口不可达,表示端口关闭
如果没有收到回包,则证明端口是开放的
和三层扫描IP刚好相反
Scapy端口开发扫描
命令:sr1(IP(dst="192.168.45.129")/UDP(dport=53),timeout=1,verbose=1)
nmap -sU 192.168.45.129
TCP扫描:基于连接的协议
三次握手:基于正常的三次握手发现目标是否在线
隐蔽扫描:发送不完整的数据包,不建立完整的连接,如ACK包,SYN包,不会在应用层访问,
僵尸扫描:不和目标系统产生交互,极为隐蔽
全连接扫描:建立完整的三次握手
所有的TCP扫描方式都是基于三次握手的变化来判断目标系统端口状态
隐蔽扫描:发送SYN数据包,如果收到对方发来的ACK数据包,证明其在线,不与其建立完整的三次握手连接,在应用层日志内不记录扫描行为,十分隐蔽,网络层审计会被发现迹象
僵尸扫描:是一种极其隐蔽的扫描方式,实施条件苛刻,对于扫描发起方和被扫描方之间,必须是需要实现地址伪造,必须是僵尸机(指的是闲置系统,并且系统使用递增的IPID)早期的win xp,win 2000都是递增的IPID,如今的LINUX,WINDOWS都是随机产生的IPID
1,扫描者向僵尸机发送SYN+ACY,僵尸机判断未进行三次握手,所以返回RST包,在RST数据包内有一个IPID,值记为X,那么扫描者就会知道被扫描者的IPID
2,扫描者向目标服务器发送SYN数据包,并且伪装源地址为僵尸机,如果目标服务器端口开放,那么就会向僵尸机发送SYN+ACK数据包,那么僵尸机也会发送RST数据包,那么其IPID就是X+1(因为僵尸机足够空闲,这个就为其收到的第二个数据包)
3,扫描者再向僵尸机发送SYN+ACK,那么僵尸机再次发送RST数据包,IPID为X+2,如果扫描者收到僵尸机的IPID为X+2,那么就可以判断目标服务器端口开放
使用scapy发送数据包:首先开启三台虚拟机,
kali虚拟机:192.168.45.128
Linux虚拟机:192.168.45.129
windows虚拟机:192.168.45.132
发送SYN数据包:
通过抓包可以查看kali给linux发送syn数据包
linux虚拟机返回Kali虚拟机SYN+ACK数据包
kali系统并不知道使用者发送了SYN包,而其莫名其妙收到了SYN+ACK数据包,便会发RST包断开连接
也可以使用下列该命令查看收到的数据包的信息,收到对方相应的SYN+ACK数据包,scapy默认从本机的80端口往目标系统的20号端口发送,当然也可以修改
如果向目标系统发送一个 随机端口:
通过抓包的获得:1,kali向linux发送SYN数据包,目标端口23456,
2,Linux系统由自己的23456端口向kali系统的20号端口返回RST+ACK数据包,表示系统端口未开放会话结束
使用python脚本去进行scapy扫描
nmap做隐蔽端口扫描:
nmap -sS 192.168.45.129 -p 80,21,110,443 #扫描固定的端口
nmap -sS 192.168.45.129 -p 1-65535 --open #扫描该IP地址下1-65535端口扫描,并只显示开放的端口
nmap -sS 192.168.45.129 -p --open #参数--open表示只显示开放的端口
nmap -sS -iL iplist.txt -p 80
由抓包可知,nmap默认使用-sS扫描,发送SYN数据包,即nmap=nmap -sS
hping3做隐蔽端口扫描:
hping3 192.168.45.129 --scan 80 -S #参数--scan后面接单个端口或者多个端口.-S表示进行SYN扫描
hping3 192.168.45.129 --scan 80,21,25,443 -S
hping3 192.168.45.129 --scan 1-65535 -S
由抓包可得:
hping3 -c 100 -S --spoof 192.168.45.200 -p ++1 192.168.45.129
参数-c表示发送数据包的数量
参数-S表示发送SYN数据包
--spoof:伪造源地址,后面接伪造的地址,
参数-p表示扫描的端口,++1表示每次端口号加1,那么就是发送SYN从端口1到端口100
最后面跟的是目标IP
通过抓包可以得知地址已伪造,但对于linux系统(192.168.45.129)来说,它收到了192.168.45.200的SYN数据包,那么就会给192.168.45.200回复SYN+ACK数据包,但该地址却是kali伪造的地址,那么要查看目标系统哪些端口开放,必须登陆地址为kali伪造的地址即(192.168.45.200)进行抓包
hping3和nmap扫描端口的区别:1,hping3结果清晰明了
2,nmap首先对IP进行DNS反向解析,如果没成功,那么便会对其端口发送数据包,默认发送SYN数据包
hping3直接向目标系统的端口发送SYN数据包,并不进行DNS反向解析
全连接端口扫描:如果单独发送SYN数据包被被过滤,那么就使用全连接端口扫描,与目标建立三次握手连接,结果是最准确的,但容易被入侵检测系统发现
response=sr1(IP(dst="192.168.45.129")/TCP(dport=80,flags="S"))
reply=sr1(IP(dst="192.168.45.129")/TCP(dport=80,flags="A",ack=(response[TCP].seq+1)))
抓包情况:首先kali向Linux发送SYN,Linux回复SYN+ACK给kali,但kali的系统内核不清楚kali曾给linux发送给SYN数据包,那么kali内核莫名其妙收到SYN+ACK包,那么便会返回RST请求断开数据包给Linux,三次握手中断,如今kali再给Linux发ACK确认数据包,Linux莫名其妙收到了ACK数据包,当然也会返回RST请求断开数据包,具体抓包如下:
那么只要kali内核在收到SYN+ACK数据包之后,不发RST数据包,那么就可以建立完整的TCP三次握手,判断目标主机端口是否开放
因为iptables存在于Linux内核中,通过iptables禁用内核发送RST数据包,那么就可以实现
使用nmap进行全连接端口扫描:(如果不指定端口,那么nmap默认会扫描1000个常用的端口,并不是1-1000号端口)
使用dmitry进行全连接端口扫描:
dmitry:功能简单,但功能简便
默认扫描150个最常用的端口
dmitry -p 192.168.45.129 #参数-p表示执行TCP端口扫描
dmitry -p 192.168.45.129 -o output #参数-o表示把结果保存到一个文本文档中去
使用nc进行全连接端口扫描:
nc -nv -w 1 -z 192.168.45.129 1-100: 1-100表示扫描1-100号端口
参数-n表示不对Ip地址进行域名解析,只把其当IP来处理
参数-v表示显示详细信息
参数-w表示超时时间
-z表示打开用于扫描的模式
常用的adb命令
Android Debug Bridge,我们一般简称为adb,主要存放在sdk安装目录下的platform-tools文件夹中,它是一个非常强大的命令行工具,通过这个工具你能够与你的android设备进行交互,被称为Android 调试桥。
它是一种客户端-服务器程序,包括以下三个组件:
adb shell 命令
adb shell 则是调用的 Android 系统中的命令,这些 Android 特有的命令都放在了 Android 设备的 system/bin 目录下
monkey命令
当您启动某个 adb 客户端时,该客户端会先检查是否有 adb 服务器进程正在运行。如果没有,它会启动服务器进程。服务器在启动后会与本地 TCP 端口 5037 绑定,并监听 adb 客户端发出的命令 - 所有 adb 客户端均通过端口 5037 与 adb 服务器通信。
然后,服务器会与所有正在运行的设备建立连接。它通过扫描 5555 到 5585 之间(该范围供前 16 个模拟器使用)的奇数号端口查找模拟器。服务器一旦发现 adb 守护程序 (adbd),便会与相应的端口建立连接。请注意,每个模拟器都使用一对按顺序排列的端口 - 用于控制台连接的偶数号端口和用于 adb 连接的奇数号端口。例如:
模拟器 1,控制台:5554
模拟器 1,adb:5555
模拟器 2,控制台:5556
模拟器 2,adb:5557
依此类推
如上所示,在端口 5555 处与 adb 连接的模拟器与控制台监听端口为 5554 的模拟器是同一个。
服务器与所有设备均建立连接后,您便可以使用 adb 命令访问这些设备。由于服务器管理与设备的连接,并处理来自多个 adb 客户端的命令,因此您可以从任意客户端(或从某个脚本)控制任意设备。
要在通过 USB 连接的设备上使用 adb,您必须在设备的系统设置中启用 USB 调试 (位于 开发者选项 下)。
在搭载 Android 4.2 及更高版本的设备上,“开发者选项”屏幕默认情况下处于隐藏状态。如需将其显示出来,请依次转到 设置 关于手机 ,然后点按 版本号 七次。返回上一屏幕,在底部可以找到 开发者选项 。
在某些设备上,“开发者选项”屏幕所在的位置或名称可能有所不同。
执行 adb devices 验证设备是否已连接。如果已连接,您将看到设备名称以“设备”形式列出。
一般情况下,adb 通过 USB 与设备进行通信,但您也可以在通过 USB 完成一些初始设置后,通过 WLAN 使用 adb,如下所述。
如果 adb 连接断开:
如果有多个设备在运行,您在发出 adb 命令时必须指定目标设备。为此,请使用 devices 命令获取目标设备的序列号。获得序列号后,请结合使用 -s 选项与 adb 命令来指定序列号。如果您要发出很多 adb 命令,可以将 $ANDROID_SERIAL 环境变量设为包含序列号。如果您同时使用 -s 和 $ANDROID_SERIAL , -s 会替换 $ANDROID_SERIAL 。
$ adb -s emulator-5555 install helloWorld.apk
注意 :如果您在多个设备可用时发出命令但未指定目标设备,adb 会生成错误。
如果有多个可用设备,但只有一个是模拟器,请使用 -e 选项将命令发送至该模拟器。同样,如果有多个设备,但只连接了一个硬件设备,请使用 -d 选项将命令发送至该硬件设备。
使用 forward 命令设置任意端口转发,将特定主机端口上的请求转发到设备上的其他端口。以下示例设置了主机端口 6100 到设备端口 7100 的转发:
adb forward tcp:6100 tcp:7100
您可以使用 pull 和 push 命令将文件复制到设备或从设备复制文件。与 install 命令(仅将 APK 文件复制到特定位置)不同,使用 pull 和 push 命令可将任意目录和文件复制到设备中的任何位置。
如需从设备中复制某个文件或目录(及其子目录),请使用以下命令:
adb pull remote local
如需将某个文件或目录(及其子目录)复制到设备,请使用以下命令:
adb push loca remote
adb kill-server
您可以使用 shell 命令通过 adb 发出设备命令,也可以启动交互式 shell。如需发出单个命令,请使用 shell 命令,如下所示:
adb [-d |-e | -s shell shell_command
在 adb shell 中,您可以使用 Activity 管理器 ( am ) 工具发出命令以执行各种系统操作,如启动 Activity、强行停止进程、广播 intent、修改设备屏幕属性,等等。在 shell 中,相应的语法为:
您也可以直接从 adb 发出 Activity 管理器命令,无需进入远程 shell。例如:
adb shell am start -a android.intent.action.VIEW
0条大神的评论