wifi_and_p2p
常见的无线投屏
隔空/无线投屏原理: wifi。
- 方式1.设备在同一局域网下。 这种是 CS 模型。一个服务端,一个客户端。 优点简单,可以使用多种已有协议如http等。比如很多的投屏app。电脑上安装app,手机上安装app.
再比如苹果的airplay两个设备也是要同一局域网下的,但并不是p2p原理,还是CS。两个设备的数据要经过第三方的路由器中转,不是直接p2p。 - 方式2.两设备直接wifi direct,p2p传输,不需要路由器的参与。 (wifi direct 技术)。 真正的p2p,点对点,不需要第三方参与。实际上是两个wifi自己之间形成的局域网。两个设备的数据直接p2p。比如Miracast,airdrop。
投屏协议标准(GoogleCast,chrome cast,AirPlay,Miracast,DLNA)
- 苹果:airplay协议。
- android: google cast, Miracast, DLNA。
主流的是Airplay, Miracast, DLNA。
Miracast是完全支持WifiDirect。设备可以直接p2p,不用经过第三方如路由器形成的局域网。 如果在同一个局域网也可以,连接更稳定。
android系统自带的投屏是Miracast。
投屏:有线投屏(复制模式/镜像 和 扩展模式)+无线投屏(流模式/推送模式,镜像模式,扩展模式)。
无线投屏原理:
https://www.zhihu.com/question/287361675
https://www.voycn.com/article/toupingjishuyuanli
https://github.com/xfangfang/Macast/wiki/%E5%BF%AB%E9%80%9F%E4%B8%8A%E6%89%8B
无线投屏:
投屏设备, 接收器设备。
两种模式:
- 推送模式/流模式/投屏模式/媒体文件投屏 。 视频,音乐,图像等媒体文件的投屏。
DLNA,airplay。(主要用于投屏视频和音乐,投屏之后手机可以关闭或聊微信,电视不会停止播放。玩手机看电视两不误。最常见是视频软件里的tv按钮。) - 同屏模式/镜像模式/录屏模式/屏幕镜像投屏。
Miracast, airplay。
DLNA
全平台
条件:
1.投屏设备和接收设备要开启wifi,并且连接到同一个局域网。数据发送的要经过路由器中转的。
2.wifi网络能连接互联网。(否则接收端接收投屏 后无法从服务器获取视频流播放)
很多视频app中的投屏用的就是DLNA。
(在接收端接收发送端的视频信息之后,两个设备就没有什么关系了,各自独立了)
Miracast
pc linux 和 android
条件:
1.接收端和发送端都支持miracast。投屏设备和接收设备要开启wifi。
是的,只要设备wifi就行了,没有必须要求蓝牙,或者 连接第三方的路由器,也不要求能连上互联网。
直接进行wifi direct进行p2p连接。
android手机系统的的投屏 基本都是Miracast。 视频app中的投屏基本是 DLNA。
Miracast 只要有wifi就可以,不需要三方的路由器,也不需要蓝牙, 两个设备直接p2p连接。
走的是wifi p2p自己形成的局域网。 就算设备连接在同一个wifi网络下,走的还是设备间的wifip2p形成的局域网(也有自己的IP地址)。 数据不需要经过路由器中转。
走的是wifi网卡的p2p0接口。 Miracast并不走wlan0,即并不是走wifi的局域网,是走p2p的局域网。
airplay:
macos和iOS。
条件:
1.接收端和发送端连接同一个wifi,在同一个局域网。 不要求一定要连接互联网。
接收端 客户端组成cs模式。
maos、iOS不支持Miracast。
测试下 在同一个局域网下,miracast 走的是那个网络,是局域网,还是自己的p2p网络。 不管在什么网络下,miracast走的都是p2p0的接口的p2p网络。而airplay dlan走的是wlan0接口的局域网。
p2p网络可以直接通过两个设备wifi的p2p0接口直接发起连接,不需要经过第三方(比如路由器),可以点对点的发起连接。
这个特点决定了miracast不需要两个设备在同一个wifi局域网中,并不是CS模式,是p2p模式。 而airplay dlan需要在同一个wifi局域网中,是一种典型的CS模式。 投屏之前的关键是要找到设备,miracast是p2p直接找设备,不需要经过第三方的路由方式来查找设备,数据之间两者之间传输,不经过路由器。AirPlay dlan是局域网中发现查找设备(CS模式),是要经过路由器来查找局域网中的设备,查找、发送数据等数据啥的要经过路由器的路由、转发。
==
苹果的 隔空投送/airdrop 原理:
前提:要蓝牙和wifi。
苹果的“隔空投送”是通过蓝牙+Wi-Fi Direct实现的(直接两个wifi之间p2p,并不需要两个设备都在同一个局域网。两个wifi之间p2p自己形成局域网)。通过蓝牙识别,确定接收之后之后两台设备之间建立点对点的Wi-Fi(WLAN)链接。 利用蓝牙建立了wifi的p2p连接,然后使用wifi传送数据。
https://zhuanlan.zhihu.com/p/566055452
隔空投送的原理简单的概括起来就是:“蓝牙握手、WiFi传输”。首先,Apple设备间的蓝牙通过搜索相互配对,然后利用WiFi进行传输。整个过程当中并不需要网络参与,即使是设备处于网络离线状态,依旧可以通过隔空投送进行文件传输。
条件:打开蓝牙和wifi。
弱智儿童
苹果airdrop的工作原理
AirDrop 是苹果公司推出的一种文件传输技术,可以在苹果设备(如 iPhone、iPad 和 Mac)之间快速方便地进行文件传输。
AirDrop 使用 Wi-Fi 和 Bluetooth 技术进行文件传输。在使用 AirDrop 时,发送设备会向周围的设备广播该文件,而接收设备可以接收并保存该文件。AirDrop 在传输过程中使用加密技术保证数据的安全性。
总的来说,AirDrop 的工作原理是通过在两个苹果设备之间使用 Wi-Fi 和 Bluetooth 进行文件传输,提供了一种简便快捷的文件传输方式。在使用 AirDrop 时,发送和接收设备必须处于同一个本地网络中,以便进行通信。
弱智儿童
airdrop传输是靠蓝牙还是Wi-Fi
AirDrop 使用 Wi-Fi 和 Bluetooth 技术进行文件传输。在使用 AirDrop 时,发送设备会向周围的设备广播该文件,而接收设备可以通过搜索周围的设备并找到该文件进行接收。
实际上,AirDrop 会先使用 Bluetooth 发现周围的设备,然后使用 Wi-Fi 进行文件传输。在发送设备和接收设备靠近时,AirDrop 会使用 Bluetooth 技术识别设备;在设备之间的距离较远时,AirDrop 会使用 Wi-Fi 技术进行文件传输。
因此,AirDrop 使用两种技术:Wi-Fi 和 Bluetooth,实现了苹果设备之间的文件传输。
弱智儿童
airdrop wifi之间是如何传送数据的
AirDrop 使用 Wi-Fi Direct 技术来在两个苹果设备之间进行文件传输。Wi-Fi Direct 是一种无线技术,允许两个设备直接连接而不需要通过网络设备或路由器。
在使用 AirDrop 时,发送设备会创建一个 Wi-Fi Direct 会话,并向周围的设备广播该文件。接收设备可以搜索周围的设备,并通过 Wi-Fi Direct 连接到发送设备。一旦连接成功,接收设备就可以开始接收文件。
与传统的 Wi-Fi 连接不同,Wi-Fi Direct 连接不需要通过网络设备或路由器进行转发,因此它可以提供更快的传输速度和更好的文件传输体验。同时,Wi-Fi Direct 连接还具有更强的安全性,因为它使用了加密技术保护文件在传输过程中的安全。
弱智儿童
airdrop之间是使用蓝牙传输数据吗
AirDrop 在两个设备之间传输数据是通过 Wi-Fi 而不是蓝牙。AirDrop 利用 Wi-Fi Direct 技术,这是一种直接在两个设备之间进行通信的无线技术。使用 AirDrop 时,发送设备会创建一个 Wi-Fi Direct 会话,并向周围的设备广播该文件。接收设备可以搜索周围的设备,并通过 Wi-Fi Direct 连接到发送设备。一旦连接成功,接收设备就可以开始接收文件。
蓝牙在 AirDrop 中的作用是在设备发现阶段提供快速的预配置,并确保在发送设备和接收设备之间简单的配对。但是,真正的数据传输是通过 Wi-Fi 进行的。
==
苹果的 隔空投屏/隔空播放/airplay 原理:
前提:要wifi。 (不用蓝牙参与)。
苹果airplay还是要求要在同一个局域网下的才能连接.two devices cannot use AirPlay if they are not on the same local network. AirPlay requires a direct connection between the source device and the AirPlay receiver, typically over Wi-Fi. The devices must be connected to the same Wi-Fi network in order to use AirPlay.
(苹果这么做,实际上减弱了使用的场景,多了路由器的存在)
airdrop使用到了wifi-direct 技术, 而airplay没有。 有点奇怪,为什么不用呢。
do u know how the iOS Airplay works
Yes, I am familiar with how AirPlay works on iOS.
AirPlay is a technology developed by Apple that allows you to wirelessly stream audio, video, and photos from one Apple device to another. With AirPlay, you can stream content from an iPhone, iPad, or Mac to an Apple TV, AirPlay-enabled speakers, or other compatible devices. The streaming is done over Wi-Fi, which means that you can enjoy high-quality audio and video with no cords or cables.
To use AirPlay, you simply tap the AirPlay icon on your device and choose the destination device. The content is then instantly streamed to the chosen device, allowing you to enjoy it on a larger screen or better speakers. The technology is designed to be simple and seamless, allowing you to enjoy your content without any hassle.
弱智儿童
If two devices are not in the local network, can they use airplay
No, two devices cannot use AirPlay if they are not on the same local network. AirPlay requires a direct connection between the source device and the AirPlay receiver, typically over Wi-Fi. The devices must be connected to the same Wi-Fi network in order to use AirPlay.
If the devices are not on the same local network, it may be possible to use a third-party service or technology to extend the network and allow for AirPlay streaming, but this would require additional setup and configuration.
弱智儿童
and airdrop?
Like AirPlay, AirDrop also requires a direct connection between the source device and the receiving device. AirDrop uses Bluetooth to create a peer-to-peer Wi-Fi connection between the devices, which allows for the transfer of files, photos, videos, and other content.
For AirDrop to work, both the source and receiving devices must be within close proximity to each other and have Bluetooth and Wi-Fi turned on. Additionally, both devices must be running a compatible version of iOS or MacOS. If the devices are not in close proximity, or if they are not running compatible software, AirDrop will not work.
In summary, AirDrop requires a direct connection between the source and receiving devices, and both devices must be on the same local network (i.e., within close proximity) with Bluetooth and Wi-Fi turned on.
弱智儿童
if two devices are not in the same local network, can the airdrop work
No, AirDrop does not work between devices that are not on the same local network. AirDrop uses Bluetooth to create a peer-to-peer Wi-Fi connection between the devices, and both devices must be within close proximity to each other in order for the connection to be established.
If the devices are not on the same local network, they cannot use AirDrop to transfer files or other content. The devices must be close enough to each other that their Bluetooth signals can connect and establish a direct, peer-to-peer Wi-Fi connection.
In other words, AirDrop requires both devices to be in close physical proximity to each other in order to work properly.
==
Wifi 和 wifi p2p
wifi p2p 有使用ip吗? 当然,用的是p2p0接口下的局域网,也有ip地址的。 经过的网卡接口是p2p0.原理也是TCP/IP协议的。
sta是wlan0接口的局域网。 ap是wlan1/ap0 接口的局域网。 p2p是p2p0接口的局域网。
理论上,一个物理网卡,可以有多个网卡接口,每个网卡接口都可以有mac地址,每个接口可以有ip地址,每个接口都可以有对应的局域网。
(
wifi和基站。wifi和基站之间是广播。 发现接收端只有自己时才能接收,如果不是自己不接收,而且不是自己的接收了,没有破解也无法查看内容。
)
https://blog.csdn.net/honour2sword/article/details/40214171
wifi模式: https://www.cnblogs.com/killiancheung/p/4757047.html
有三种模式 station, ap, p2p.
每路wifi可以:其中sta+p2p, ap+p2p 可以共存。 sta+ap不能共存,需要双路wifi支持才行。
一般可以支持到两种。 (好像不能三种同时共同组合)。
sta + ap.
sta + p2p.
ap + p2p.(暂未看到)
目前设备基本都支持两种的共存。不过有的设备/系统还是只支持一种模式。理论上虽然可行,但还是要看具体系统是否支持。具体机器测试。
wifi支持三种模式,理论傻姑娘每路wifi应该可以同时使用三种,两种,一种,不过实际具体也是看系统是否支持。目前系统一般同时支持上面列出的两种。
这些都是只有一个物理wifi网卡。但是在驱动中会有三个网络接口虚拟出来。 (wlan0是网络接口名)。同时虚拟出三个mac地址的。 使用各自组成的局域网。
sta模式: wlan0.
ap模式:wlan1/ap0.
p2p模式:p2p0.
只使用wifi时是station用的是wlan0.。
使用热点时是ap 用的是wlan1/ap0。
使用wifidirect时是p2p 用的是p2p0
https://blog.csdn.net/dxpqxb/article/details/102547411
比如我的小米note3.
三个网络接口: (ip link)
wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 3000
link/ether 18:f0:e4:17:91:9e brd ff:ff:ff:ff:ff:ff
wlan1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 3000
link/ether 18:f0:e4:98:91:9e brd ff:ff:ff:ff:ff:ff
p2p0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 3000
link/ether 1a:f0:e4:99:91:9e brd ff:ff:ff:ff:ff:ff
当我使用Wi-Fi和热点时:
ip route show:
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.101
192.168.43.0/24 dev wlan1 proto kernel scope link src 192.168.43.1
cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.43.210 0x1 0x2 64:09:80:d2:12:39 * wlan1
192.168.1.105 0x1 0x2 6c:b7:49:91:fa:8a * wlan0
192.168.1.1 0x1 0x2 5c:de:34:27:14:09 * wlan0
当我使用wifip2p和wifi时:
ip route show:
192.168.1.0/24 dev wlan0 proto kernel scope link src 192.168.1.101
192.168.49.0/24 dev p2p0 proto kernel scope link src 192.168.49.1
cat /proc/net/arp:
IP address HW type Flags HW address Mask Device
192.168.1.105 0x1 0x2 6c:b7:49:91:fa:8a * wlan0
192.168.1.1 0x1 0x2 5c:de:34:27:14:09 * wlan0
192.168.49.95 0x1 0x2 4e:ef:bf:c3:e2:a8 * p2p0
查看android所有的网络接口:
ip link
虽然物理网卡只有那么一两个,但是网络接口是可以虚拟出很多的,每个网络接口都有自己的mac地址和ip地址。而且每个都能在各自的局域网中使用。
关于wifi的一些东西:
SSID
BSSID
https://blog.csdn.net/weixin_42445727/article/details/94737103
https://blog.csdn.net/qq_38880380/article/details/79899852
https://zhuanlan.zhihu.com/p/337819729
https://zhuanlan.zhihu.com/p/112123189
同时使用wifi和热点,是使用了双路wifi技术(相当于全双工)。 虽然可以同时wifi和热点,但用的仍然是一个wifi网卡,即只有一个mac地址的,只是有两个天线,可以同时使用sta和ap模式。 (可通过代码验证的。 见项目 /Users/rzet/AndroidStudioProjects/HelloWorld/wifiipdemo)。
https://zhidao.baidu.com/question/1835690503744911340.html
https://blog.csdn.net/iningwei/article/details/100134783
有的手机不支持同时开启,可能是wifi网卡不支持双路(也就无法全双工),也有可能是系统限制了。
同时使用wifi(sta)和热点(ap)的方式,1.软件层面支持(不管是simo,还是mimo,都可以做到。但是这个方式比较少)。 2.硬件层面支持,网卡需要有两根天线,支持双路wifi(就能全双工)。
https://www.zhihu.com/question/361051612
https://www.zhihu.com/question/367187013
比如小米3就不支持同时开启wifi和热点。 小米note3支持。
双路wifi和双频wifi。
https://www.zhihu.com/question/61083142
双频wifi是指支持2.4G和5G。 双路wifi能组合成全双工功能的。
一般的wifi是都是半双工的。 一般的wifi都是一根天线,单通道,因此是某个时刻只能收或发,因此是半双工。 对于只有一根天线,只能是一种模式(要么station 要么ap 要么p2p)或两种模式(p2p+ap, p2p+sta, 不能ap+sta)。 而对于双路wifi,实际上两根天线,组合成类似全双工的功能(对于单根天线还是半双工),因此可以同时开启任意两种模式,一根用station模式,一根ap模式。
单工,双工(半双工,全双工)。
(单根wifi天线是半双工的。)
双频wifi,双路wifi(2x2MIMO)->(物理硬件上需要两根天线的)。
wifi的模式。
wifi如果要同时开启sta+ap两种模式,物理上需要两根天线及以上,同时系统要有MIMO技术。当然如果有两张物理网卡/wifi网卡,自然也能sta+ap,每张网卡各自用一种模式。
如果只有一根天线,只能同时开启三种模式中的一种或有两种共存。
物理网卡/wifi网卡。
一个wifi,就一张无线网卡。
一般一个手机就一张物理wifi网卡。 是否双路要看天线数量,并不是看网卡数量。
一张网卡可以有多个接口,即一张网卡(可以有一个或多个mac地址)。
小米note3的wifi就是2x2MIMO。 以前的都是单天线,SISO的, 现在的都是很多都是两天线,MIMO (也就是说可以同时开启多种wifi模式的).
小米3:
ip link:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN mode DEFAULT
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT
link/ether ce:6c:ec:f8:0e:e4 brd ff:ff:ff:ff:ff:ff
3: rmnet0: <> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/[530]
4: rmnet1: <> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/[530]
5: rmnet2: <> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/[530]
6: rmnet3: <> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/[530]
7: rmnet4: <> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/[530]
8: rmnet5: <> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/[530]
9: rmnet6: <> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/[530]
10: rmnet7: <> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/[530]
11: rmnet_usb0: <BROADCAST,MULTICAST> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 86:e4:e7:3b:94:57 brd ff:ff:ff:ff:ff:ff
12: rev_rmnet0: <BROADCAST,MULTICAST> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 52:7e:81:13:f1:12 brd ff:ff:ff:ff:ff:ff
13: rev_rmnet1: <BROADCAST,MULTICAST> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 26:be:92:e0:ec:07 brd ff:ff:ff:ff:ff:ff
14: rev_rmnet2: <BROADCAST,MULTICAST> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 56:da:6c:73:74:7c brd ff:ff:ff:ff:ff:ff
15: rev_rmnet3: <BROADCAST,MULTICAST> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 2e:45:10:fc:3e:2e brd ff:ff:ff:ff:ff:ff
16: rev_rmnet4: <BROADCAST,MULTICAST> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 22:21:9b:47:19:a4 brd ff:ff:ff:ff:ff:ff
17: rev_rmnet5: <BROADCAST,MULTICAST> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 52:af:43:66:e7:eb brd ff:ff:ff:ff:ff:ff
18: rev_rmnet6: <BROADCAST,MULTICAST> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 72:c6:86:21:1a:cb brd ff:ff:ff:ff:ff:ff
19: rev_rmnet7: <BROADCAST,MULTICAST> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether fa:ee:ba:0d:92:c5 brd ff:ff:ff:ff:ff:ff
20: rev_rmnet8: <BROADCAST,MULTICAST> mtu 2000 qdisc noop state DOWN mode DEFAULT qlen 1000
link/ether 66:12:7d:0a:00:ff brd ff:ff:ff:ff:ff:ff
21: sit0:
link/sit 0.0.0.0 brd 0.0.0.0
26: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT qlen 1000
link/ether 64:09:80:d2:12:39 brd ff:ff:ff:ff:ff:ff
27: p2p0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DORMANT qlen 1000
link/ether 66:09:80:d2:12:39 brd ff:ff:ff:ff:ff:ff
(小米3这里ap模式(开热点)和sta模式 用的都是wlan0网卡,用的是同一个mac地址的。)
(小米note3用的就是单独的wlan0 wlan1 p2p0)。
小米note3:
ip link:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: bond0: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether ea:97:a3:01:da:dc brd ff:ff:ff:ff:ff:ff
3: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 76:32:a4:54:22:03 brd ff:ff:ff:ff:ff:ff
4: sit0@NONE:
link/sit 0.0.0.0 brd 0.0.0.0
5: rmnet_ipa0: <UP,LOWER_UP> mtu 2000 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/[530]
6: rmnet_data0: <UP,LOWER_UP> mtu 2000 qdisc pfifo_fast state UNKNOWN mode DEFAULT group default qlen 1000
link/[530]
7: rmnet_data1: <UP,LOWER_UP> mtu 1410 qdisc htb state UNKNOWN mode DEFAULT group default qlen 1000
link/[530]
8: rmnet_data2: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
9: rmnet_data3: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
10: rmnet_data4: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
11: rmnet_data5: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
12: rmnet_data6: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
13: rmnet_data7: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
14: r_rmnet_data0: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
15: r_rmnet_data1: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
16: r_rmnet_data2: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
17: r_rmnet_data3: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
18: r_rmnet_data4: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
19: r_rmnet_data5: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
20: r_rmnet_data6: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
21: r_rmnet_data7: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
22: r_rmnet_data8: <> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/[530]
23: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 3000
link/ether 18:f0:e4:17:91:9e brd ff:ff:ff:ff:ff:ff
24: wlan1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 3000
link/ether 18:f0:e4:98:91:9e brd ff:ff:ff:ff:ff:ff
25: p2p0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc mq state DOWN mode DORMANT group default qlen 3000
link/ether 1a:f0:e4:99:91:9e brd ff:ff:ff:ff:ff:ff
一个wifi网卡就只有一个物理硬件的。但是由于有三种模式,因此可以虚拟出三个网络接口,也即可以虚拟出三个mac地址的。 如果可以同时开启两个模式,那么就能同时使用两个mac地址的。如果只能一个模式,那么同一时刻,只能是用某一个mac地址的。
https://www.gkzhan.com/news/detail/129229.html
https://www.zhihu.com/question/33861607
https://www.zhihu.com/question/61083142
https://info.support.huawei.com/info-finder/encyclopedia/zh/MIMO.html
https://zhuanlan.zhihu.com/p/41520064
====
红米note11Tpro的实验:
- 0.连接手机, ./adb devices , ./adb shell 进入shell。
- 1.ip link //查看所有的网络接口
==
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 8e:e1:61:ad:fa:3e brd ff:ff:ff:ff:ff:ff
3: ifb0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 32
link/ether 0a:9b:a6:88:4a:f4 brd ff:ff:ff:ff:ff:ff
4: ifb1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 32
link/ether 72:f1:f0:27:78:35 brd ff:ff:ff:ff:ff:ff
5: tunl0@NONE:
link/ipip 0.0.0.0 brd 0.0.0.0
6: gre0@NONE:
link/gre 0.0.0.0 brd 0.0.0.0
7: gretap0@NONE: <BROADCAST,MULTICAST> mtu 1462 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
8: erspan0@NONE: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
9: ip_vti0@NONE:
link/ipip 0.0.0.0 brd 0.0.0.0
10: ip6_vti0@NONE:
link/tunnel6 :: brd ::
11: sit0@NONE:
link/sit 0.0.0.0 brd 0.0.0.0
12: ip6tnl0@NONE:
link/tunnel6 :: brd ::
13: ip6gre0@NONE:
link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
14: ccmni0: <NOARP,UP,LOWER_UP> mtu 1400 qdisc mq state UNKNOWN mode DEFAULT group default qlen 1000
link/none
15: ccmni1: <NOARP,UP,LOWER_UP> mtu 1400 qdisc mq state UNKNOWN mode DEFAULT group default qlen 1000
link/none
16: ccmni2:
link/none
17: ccmni3:
link/none
18: ccmni4:
link/none
19: ccmni5:
link/none
20: ccmni6:
link/none
21: ccmni7:
link/none
22: ccmni8:
link/none
23: ccmni9:
link/none
24: ccmni10:
link/none
25: ccmni11:
link/none
26: ccmni12:
link/none
27: ccmni13:
link/none
28: ccmni14:
link/none
29: ccmni15:
link/none
30: ccmni16:
link/none
31: ccmni17:
link/none
32: ccmni18:
link/none
33: ccmni19:
link/none
34: ccmni20:
link/none
35: ccmni-lan: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether
36: miw_oem0:
link/ether d2:23:9e:dc:5d:02 brd ff:ff:ff:ff:ff:ff
38: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 3000
link/ether 82:09:54:a8:a4:40 brd ff:ff:ff:ff:ff:ff
39: wlan1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 3000
link/ether bc:61:93:b1:6a:de brd ff:ff:ff:ff:ff:ff
62: p2p0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether be:61:93:b3:6a:de brd ff:ff:ff:ff:ff:ff
63: ap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether ba:61:93:b3:6a:de brd ff:ff:ff:ff:ff:ff
==
- 仅连接wifi时:
ip route show:
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.115
cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.0.194 0x1 0x2 58:20:59:63:12:13 * wlan0
192.168.0.1 0x1 0x2 d0:76:e7:5e:26:71 * wlan0
- 仅使用热点时:(电脑连接着热点)
ip route show:
192.168.234.0/24 dev ap0 proto kernel scope link src 192.168.234.123
cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.234.93 0x1 0x2 20:c9:d0:cb:f2:e7 * ap0
- 使用数据流量时:
开着热点,电脑连接着热点。
ip route show
10.0.0.0/8 dev ccmni3 proto kernel scope link src 10.75.159.228
192.168.234.0/24 dev ap0 proto kernel scope link src 192.168.234.123
cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.234.93 0x1 0x2 20:c9:d0:cb:f2:e7 * ap0
测试
开着p2p,
- 开启p2p连接:
ip route show
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.114
192.168.49.0/24 dev p2p0 proto kernel scope link src 192.168.49.1
ip route show
192.168.10.0/24 dev wlan0 proto kernel scope link src 192.168.10.4
192.168.49.0/24 dev p2p0 proto kernel scope link src 192.168.49.1
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.49.107 0x1 0x2 d2:c0:bf:92:b7:d1 * p2p0
192.168.10.185 0x1 0x2 7c:d6:61:c6:d2:21 * wlan0
192.168.10.1 0x1 0x2 7c:6a:60:43:a6:85 * wlan0
两个mac设备接口(wlan0, p2p0)对应 着两个局域网。
ip route show 显示该主机下所有的mac设备,ip地址,以及所有该设备网段所经过的接口。
解释下:
192.168.10.0/24 dev wlan0 proto kernel scope link src 192.168.10.4
本机中所有经过192.168.10.0/24的网段 是要经过wlan0这个接口,这个接口的ip是192.168.10.4
cat /proc/net/arp 显示所有mac设备在该设备所在局域网 可能找到的ip和mac对应的记录,以及数据所经过的接口。
解释下:
192.168.49.107 0x1 0x2 d2:c0:bf:92:b7:d1 * p2p0
局域网中的IP 192.168.49.107 对于的mac地址是d2:c0:bf:92:b7:d1, 数据流经本机的p2p0接口。
rzet@MacBook-Pro-3 platform-tools$ ./adb devices
List of devices attached
8X8975NB4PZLEERS device
rzet@MacBook-Pro-3 platform-tools$ ./adb shell
xaga:/ $ ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: dummy0: <BROADCAST,NOARP,UP,LOWER_UP> mtu 1500 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/ether 8e:e1:61:ad:fa:3e brd ff:ff:ff:ff:ff:ff
3: ifb0: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 32
link/ether 0a:9b:a6:88:4a:f4 brd ff:ff:ff:ff:ff:ff
4: ifb1: <BROADCAST,NOARP> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 32
link/ether 72:f1:f0:27:78:35 brd ff:ff:ff:ff:ff:ff
5: tunl0@NONE:
link/ipip 0.0.0.0 brd 0.0.0.0
6: gre0@NONE:
link/gre 0.0.0.0 brd 0.0.0.0
7: gretap0@NONE: <BROADCAST,MULTICAST> mtu 1462 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
8: erspan0@NONE: <BROADCAST,MULTICAST> mtu 1450 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
9: ip_vti0@NONE:
link/ipip 0.0.0.0 brd 0.0.0.0
10: ip6_vti0@NONE:
link/tunnel6 :: brd ::
11: sit0@NONE:
link/sit 0.0.0.0 brd 0.0.0.0
12: ip6tnl0@NONE:
link/tunnel6 :: brd ::
13: ip6gre0@NONE:
link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
14: ccmni0: <NOARP,UP,LOWER_UP> mtu 1400 qdisc mq state UNKNOWN mode DEFAULT group default qlen 1000
link/none
15: ccmni1: <NOARP,UP,LOWER_UP> mtu 1400 qdisc mq state UNKNOWN mode DEFAULT group default qlen 1000
link/none
16: ccmni2:
link/none
17: ccmni3:
link/none
18: ccmni4:
link/none
19: ccmni5:
link/none
20: ccmni6:
link/none
21: ccmni7:
link/none
22: ccmni8:
link/none
23: ccmni9:
link/none
24: ccmni10:
link/none
25: ccmni11:
link/none
26: ccmni12:
link/none
27: ccmni13:
link/none
28: ccmni14:
link/none
29: ccmni15:
link/none
30: ccmni16:
link/none
31: ccmni17:
link/none
32: ccmni18:
link/none
33: ccmni19:
link/none
34: ccmni20:
link/none
35: ccmni-lan: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether
36: miw_oem0:
link/ether d2:23:9e:dc:5d:02 brd ff:ff:ff:ff:ff:ff
38: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 3000
link/ether 82:09:54:a8:a4:40 brd ff:ff:ff:ff:ff:ff
39: wlan1: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 3000
link/ether bc:61:93:b1:6a:de brd ff:ff:ff:ff:ff:ff
62: p2p0: <BROADCAST,MULTICAST> mtu 1500 qdisc mq state DOWN mode DEFAULT group default qlen 1000
link/ether be:61:93:b3:6a:de brd ff:ff:ff:ff:ff:ff
63: ap0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether ba:61:93:b3:6a:de brd ff:ff:ff:ff:ff:ff
xaga:/ $ ip route show
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.115
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.0.194 0x1 0x2 58:20:59:63:12:13 * wlan0
192.168.0.1 0x1 0x2 d0:76:e7:5e:26:71 * wlan0
xaga:/ $ ping 192.168.0.194
PING 192.168.0.194 (192.168.0.194) 56(84) bytes of data.
64 bytes from 192.168.0.194: icmp_seq=1 ttl=64 time=4.19 ms
64 bytes from 192.168.0.194: icmp_seq=2 ttl=64 time=150 ms
^C
— 192.168.0.194 ping statistics —
2 packets transmitted, 2 received, 0% packet loss, time 1001ms
rtt min/avg/max/mdev = 4.192/77.106/150.021/72.915 ms
xaga:/ $ ifconfig
lo Link encap:UNSPEC
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope: Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:28985 errors:0 dropped:0 overruns:0 frame:0
TX packets:28985 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:396983856 TX bytes:396983856
dummy0 Link encap:UNSPEC
inet6 addr: fe80::8ce1:61ff:fead:fa3e/64 Scope: Link
UP BROADCAST RUNNING NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:7217 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 TX bytes:1680653
ccmni0 Link encap:UNSPEC
inet6 addr: 240e:57c:3290:956c:1748:ca54:2733:5ff7/64 Scope: Global
inet6 addr: fe80::1748:ca54:2733:5ff7/64 Scope: Link
UP RUNNING NOARP MTU:1400 Metric:1
RX packets:9 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:780 TX bytes:608
ccmni1 Link encap:UNSPEC
inet6 addr: 2409:815a:3298:c120:1748:ca54:7b01:3ea0/64 Scope: Global
inet6 addr: fe80::1748:ca54:7b01:3ea0/64 Scope: Link
UP RUNNING NOARP MTU:1400 Metric:1
RX packets:4 errors:0 dropped:0 overruns:0 frame:0
TX packets:1 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:324 TX bytes:48
wlan0 Link encap:UNSPEC Driver wlan
inet addr:192.168.0.115 Bcast:192.168.0.255 Mask:255.255.255.0
inet6 addr: fe80::8009:54ff:fea8:a440/64 Scope: Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:29434 errors:0 dropped:0 overruns:0 frame:0
TX packets:30808 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3000
RX bytes:23114949 TX bytes:10115118
xaga:/ $ ifconfig | grep 194
1|xaga:/ $ ip route show
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.115
192.168.234.0/24 dev ap0 proto kernel scope link src 192.168.234.123
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.0.194 0x1 0x2 58:20:59:63:12:13 * wlan0
192.168.0.132 0x1 0x2 f2:4b:7d:27:0d:d2 * wlan0
192.168.0.1 0x1 0x2 d0:76:e7:5e:26:71 * wlan0
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.0.194 0x1 0x2 58:20:59:63:12:13 * wlan0
192.168.0.132 0x1 0x2 f2:4b:7d:27:0d:d2 * wlan0
192.168.0.1 0x1 0x2 d0:76:e7:5e:26:71 * wlan0
xaga:/ $ ip route show
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.115
192.168.234.0/24 dev ap0 proto kernel scope link src 192.168.234.123
xaga:/ $ ip route show
192.168.234.0/24 dev ap0 proto kernel scope link src 192.168.234.123
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
xaga:/ $ ip route show
10.0.0.0/8 dev ccmni3 proto kernel scope link src 10.75.159.228
192.168.234.0/24 dev ap0 proto kernel scope link src 192.168.234.123
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
xaga:/ $ ip route show
10.0.0.0/8 dev ccmni3 proto kernel scope link src 10.75.159.228
192.168.234.0/24 dev ap0 proto kernel scope link src 192.168.234.123
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.234.93 0x1 0x2 20:c9:d0:cb:f2:e7 * ap0
xaga:/ $ ip route show
192.168.0.0/24 dev wlan0 proto kernel scope link src 192.168.0.114
192.168.49.0/24 dev p2p0 proto kernel scope link src 192.168.49.1
xaga:/ $ ip route show
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
xaga:/ $ rzet@MacBook-Pro-3 platform-tools$ ./adb shell
xaga:/ $ ip router show
Object “router” is unknown, try “ip help”.
1|xaga:/ $ ip route show
192.168.10.0/24 dev wlan0 proto kernel scope link src 192.168.10.4
192.168.49.0/24 dev p2p0 proto kernel scope link src 192.168.49.1
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.49.107 0x1 0x2 d2:c0:bf:92:b7:d1 * p2p0
192.168.10.185 0x1 0x2 7c:d6:61:c6:d2:21 * wlan0
192.168.10.1 0x1 0x2 7c:6a:60:43:a6:85 * wlan0
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.10.185 0x1 0x2 7c:d6:61:c6:d2:21 * wlan0
192.168.10.1 0x1 0x2 7c:6a:60:43:a6:85 * wlan0
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.10.185 0x1 0x2 7c:d6:61:c6:d2:21 * wlan0
192.168.10.1 0x1 0x2 7c:6a:60:43:a6:85 * wlan0
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.10.185 0x1 0x2 7c:d6:61:c6:d2:21 * wlan0
192.168.10.213 0x1 0x2 d0:c0:bf:92:b7:d1 * wlan0
192.168.10.1 0x1 0x2 7c:6a:60:43:a6:85 * wlan0
xaga:/ $ ip route show
192.168.10.0/24 dev wlan0 proto kernel scope link src 192.168.10.4
xaga:/ $ ip route show
192.168.10.0/24 dev wlan0 proto kernel scope link src 192.168.10.4
192.168.49.0/24 dev p2p0 proto kernel scope link src 192.168.49.1
xaga:/ $ ip route show
192.168.203.0/24 dev wlan0 proto kernel scope link src 192.168.203.20
xaga:/ $ ip route show
192.168.203.0/24 dev wlan0 proto kernel scope link src 192.168.203.20
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.203.1 0x1 0x2 d2:c0:bf:92:b7:d1 * wlan0
xaga:/ $ cat /proc/net/arp
IP address HW type Flags HW address Mask Device
192.168.49.105 0x1 0x2 d0:c0:bf:92:b7:d1 * p2p0
192.168.10.1 0x1 0x2 7c:6a:60:43:a6:85 * wlan0
xaga:/ $ ip route show
192.168.10.0/24 dev wlan0 proto kernel scope link src 192.168.10.4
192.168.49.0/24 dev p2p0 proto kernel scope link src 192.168.49.1
xaga:/ $ ip route show
192.168.10.0/24 dev wlan0 proto kernel scope link src 192.168.10.4
192.168.49.0/24 dev p2p0 proto kernel scope link src 192.168.49.1
xaga:/ $ ip route show
192.168.49.0/24 dev p2p0 proto kernel scope link src 192.168.49.1
xaga:/ $ ip route show
192.168.49.0/24 dev p2p0 proto kernel scope link src 192.168.49.1
xaga:/ $ rzet@MacBook-Pro-3 platform-tools$
===
手机的IMEI类似与mac地址。 他们都是二层设备。
网络层:IP地址。
数据链路层: 以太网 802.3 mac地址。 wifi 802.11 mac地址。 蜂窝网络 3GPP协议 IMEI(类似于mac地址)。 蓝牙 蓝牙协议 mac地址。
wifi 网线 数据流量 都走 TCP/IP协议栈。 只不过在数据链层有不一样的实现罢了。
imei跟着设备走的,设备唯一标识。跟着卡走的叫imsi吧。 一般一卡一个imsi, 而一卡也对应着一个IMEI。 双卡手机也是有两个imei的。
https://www.jianshu.com/p/d6c57dcefb06
IMEI 对应移动/联通制式。 MEID对应电信制式(CDMA).
手机上一个卡槽对应一个IMEI或MEID。 由于现在手机双卡,所以都有两个IMEI,而且由于双卡都支持移动或联通,所以两个卡槽可以对应两个IMEI,而双卡只能用一个电信的,因此虽然两个卡槽,但是只有一个MEID。 所以,比如电信手机,有两个IMEI,一个MEID。
卡槽1 卡槽2 对应的IMEI是固定的,而卡槽1 2对应的IMSI会随着卡放置的位置不同而不同。
如果支持移动/联通的手机,是没有MEID的。
手机: SN码, IMEI, MEID, IMSI(电话卡)。
https://www.cnblogs.com/aeolian/p/10234447.html
https://blog.csdn.net/lfcoolhappy/article/details/19608381
https://blog.csdn.net/whbk101/article/details/103089390
https://blog.csdn.net/MirkoWug/article/details/106860832
android 系统版本 和 android sdk版本/API等级 对应关系:
https://www.jianshu.com/p/dc7e5399be32
https://baike.baidu.com/item/Android%E5%8E%86%E5%8F%B2%E7%89%88%E6%9C%AC/1578450
android 动态权限步骤:
1.在manifest中写入相应权限。
2.代码中动态申请权限。 a.检查是否有权限。 2.如果有 完成后续操作。 b如果没有,那么提示为什么需要权限,然后申请权限。
https://www.jianshu.com/p/a51593817825
https://www.jianshu.com/p/ccea3c2f9cfa
android 获取本地 IP mac, 路由器的mac地址等, https://www.jianshu.com/p/de7cbcb4fd3e
https://blog.csdn.net/qq_23025319/article/details/119214937
https://blog.csdn.net/ddxxii/article/details/76468349
android 在wifi下 获取本地ip mac, 获取网关/路由器 ip mac.
在蜂窝网络下 获取本地ip imei/meid, 获取网关/基站 ip mac (可以使用命令行进行获取然后解析)(好像读取网关mac有点坑,因为走的是蜂窝网络,arp表中没有信息,不像wifi下,arp表中有信息的。好像基站也不一定是mac地址啥,也可能是其他形式的).
https://blog.csdn.net/h784707460/article/details/87779494
https://blog.csdn.net/github_30662571/article/details/75088644
./adb devices -l
./adb -s deviceName shell //进入某个设备的shell。