① android 蜂窝和 wifi 网络
可参考,同时使用 蜂窝 和 wifi 连接
https://blog.csdn.net/lqxandroid2012/article/details/79071027
netcfg 命令查看
当打开 wifi 时,wlan0 为 up 状态
当连接上蜂窝网络(蜂窝可用)时,wlan0 为 up 状态,rmnet0 也是 up 状态
当蜂窝可用且连接 wifi 时,rmnet0 状态为 DOWN,wlan0 显示的有 ID
② Android 6.0 策略路由
实现648 Android 6.0端与410 linux端通过Switch通信
1. 虚拟网卡配置
648中延用638中方法在有线网络接口eth0上创建虚拟网卡eth0.1并设置ip 10.66.1.3用以与410地址10.66.1.2通信。
配置结果可通过命令“ifconfig”查看:
并且配置完成后,系统路由表中会自动多出一条路由:
2. Android M 多网络共存
经过步骤一的配置之后在638 Android 4.4系统上即可与410建立通信;但在648 Android 6.0上是不通的。此问题查询了很长时间终于有了解决方案,且听我细细道来。
Android4.4只使用了一张路由表,使用busybox route就可以完成路由表的设置,从Android5.0之后,考虑要对多网络的支持,采用了多路由表。Android 5.0(LOLLIPOP)以上,在同一时间下,Android系统可以允许多网络类型连接,而且并不是简单的网络共存,而是每个网络有一套自己的dns,网关,路由表。比如eth0,wlan0分别有自己独立的一套。应用层在建立socket连接的时候,可以自由选择使用那套网络;在这样子的前提下,你就可以选择究竟采用那种网络来完成你的请求。这里还涉及到另一个新的概念不同网络的标识netid,应用层可通过绑定指定的netid来设置该应用走指定的网络,但此处暂不赘述有兴趣可自己了解。在Android 5.0(LOLLIPOP)之前,在同一时间下,Android系统只能允许一种网络类型连接。之后在多网络的情况下,系统是如何选择的呢?这就需要引入一个关键名词“策略路由”。
策略路由在linux中已经存在很久,但是Android5.0开始才真正将其作用发挥出来。策略路由区别于一般的路由就在于,一般的路由是以目的地址作为识别与区分的标识,例如下面这个路由表,它表示所有目的地址为192.168.7.0/24的数据包都直接从eth0发出
当面对比较复杂的情况时,这种基于目的地址的路由,就很受局限。例如:有两个网卡eth0, eth1,希望所有http上网数据从eth0出去,FTP数据从eth1出去。这种情况就必须要策略路由才能处理。
策略路由的基本命令:
648上策略路由信息:
各部分解释
整行的意思就是,如果一个数据包符合规则(源地址、目的地址、协议、端口、数据包大小、内容等),则使用指定路由表。
系统最多支持255个路由表:
在默认情况下进行路由时,首先会根据规则0在本地路由表里寻找路由,如果目的地址是本网络,或是广播地址的话,在这里就可以找到合适的路由;从这个路由规则中可以看到, 路由表 local优先,然后是netid 对应 0x10064 的走 eth0 路由表,对应 0x10066 走 eth0 路由表。而通常情况下访问网络时没有设置 netid,默认就使用 22000: from all fwmark 0x0/0xffff lookup eth0 这个,即 eth0 路由表。
有了策略路由,就可以保证当多网卡存在是,每个网卡有自己的路由表,为多网卡共存提供路由基础。上层应用,可以选择要经过的路由。
此处没有走eth0.1到10.66.1.2的路由策略,需添加:
3. Linux 路由与策略路由
Linux是在内核2.1开始采用策略性路由机制的。策略性路由机制与传统的路由算法相比主要是引入了上面的多路由表以及规则的概念。
要配置一个策略路由有2步:
1、在自定义路由表中添加要走的路由 ip route add xxx table table_num
2、增加策略,使得符合该策略的流量走第一步所定义的路由表 ip rule add 策略 【table tablenum 或 动作】。
传统的linux路由是由一张路由表去保存网络链路上的路由信息的。新的linux策略路由的理念是使用多张路由表去保存路由信息。何为策略路由呢,就是为不用的数据包制定不同的路由策略,即在IP路选时走不同的路由。
在策略路由机制中,可以支持多张路由表,最多可支持255张表。其中4张是内置路由表,如下:
策略路由的作用
1 基于源地址选路( Source-Sensitive Routing)
2 根据服务级别选路( Quality of Service)
3 节省费用的应用
4 负载平衡(Load Sharing)
③ 监控android终端流量,只计算wlan0吗
一、通过pid获取流量
获取应用的pid adb shell ps | grep packagename
通过pid获取该进程的流量信息 adb shell cat /proc/"+Pid+"/net/dev"
计算wlan0,所有列上传和下载的流量之和
这里的wlan0代表wifi 下载上传所有数据,数值单位是字节,可以/1024换算成KB
注:由于pid只在app进程启动时才能获取,对获取app启动流量不太方便,多进程应用需要多个pid结果之和。
二、通过userId获取流量
获取应用的userId adb shell mpsys package packageName | findstr userId
通过uid获取流量 adb shell cat /proc/net/xt_qtaguid/stats | findstr userId
计算wlan0行,第6列和第8列的和
与方法一不同的是,这里第6列和第8列,分别代表下载与上传
注:通过userId还有另一种方法
adb shell cat /proc/uid_stat/userId /tcp_rcv
adb shell cat /proc/uid_stat/userId /tcp_snd
可分别获取下载和上传流量,适用Android 早期版本,但不能区分移动流量和wifi流量
三、通过tcpmp和wireshark计算流量
root机型下,把tcpmp工具push到sd卡
使用tcpmp命令,监控测试期间的流量,并生成pcap文件
导出pcap文件,并使用wireshark打开
过滤被app有关的数据,求和计算
④ Android WiFi调试常用标签(Tag)
都知道的,要看Android log如果不加过滤器,那么对应的信息量极其的庞大,要在这些大信息量找到我们关心的可能需要耗费比较长的时间,所以对于在调试WiFi过程,那些标签是需要关注的呢?
WiFi的核心服务,是启动整个WiFi服务的,它在我们的logcat关注范围内
WiFi的扫描服务,一般我点开或者进入到WiFi列表页面里,这个服务在后台帮我们刷新热点,同样在logcat关注的范围内
关于有线与WiFi的切换,以及系统关于网络的链接,它帮忙在管着事呢,所以也在logcat关注的范围内
系统网络相关的命令执行需要涉及到它,比如像Setting iface up 或者bring up eth0 这些事儿,它帮忙在处理,同样也在WiFi调试时logcat关注范围内
这个标签也是比较常用到,在hardware/libhardware_legacy/wifi/wifi.c里面,主要帮忙实现drv的加载/卸载,以及处理与wpa_supplicant之间相关事件的通信,常用于前期的WiFi Drv导入调试比较多,所以也在logcat关注范围内
这是一个类似链接的服务,一般用于 Tethering wlan0 或者 等等,可以帮忙辅助调试WiFi流程,也在logcat关注范围内
对于可以支持软件AP的WiFi Dongle设备来说,这是一个很关键的服务(工具),一般用来初始化设置软AP的参数(ssid、channel、psk、wpa、带宽等参数)详细具体可参考 hostapd.conf
WiFi中心处理枢纽,很多的WiFi状态处理都离不开它,所以也是在logcat需要关注的范围
它在系统网络有着重要的地位,因为其处理的业务包含了dns,路由控制表, dhcp相关等等,可以这么说,系统网络涉及到无法ping通一些特定的域名或者网站,可以来这里找找原因,所以它也在logcat关注范围内,其中该文件在/system/netd/server/TetherController.cpp,
一个神奇且强大的工具,集中了dns,dhcp,router等功能,它很适合在一些小网络(轻量级)架构发挥着强大的作用,详细可以参见 这里
可以看下它工作时打印
以上主要为调试WiFi 软AP常用的Tag
对应的logcat 命令如下
在切换到 Sta 状态时,我们需要重点关注wpa_supplicant对应的log
开启wpa_supplicant的log,只需要修改一个地方即可,在找到对应init.xx.rc启动wpa_supplicant进程,在启动前添加 -dd的参数(将wpa_supplicant log 级别设为debug)即可,后续关于wpa_supplicant调试会继续更新整理
⑤ 淫技:android无屏操作之adb操控wifi
1.开启wpa_supplicant服务端
meta_wpa_supplicant.conf是配置文件,ctrl_interface是wpa_supplicant与wpa_cli通信的接口,ssid为要连接的wifi热点名称,key_mgmt为加密方式(NONE表示不加密 O(∩_∩)O~)。
2.wpa_cli连接wpa_supplicant
3.扫描wifi
4.使能network0
上面都是完整的语句,我们可以直接使用/system/bin/wpa_cli -iwlan0 -p /data/misc/wifi/sockets进入wifi命令模式,如下图所示,wifi命令模式下可以直接使用scan,status等指令
成功连上了TE-NonSignal的wifi,你可能会纳闷,怎么执行enable_network 0就连上了呢?手机怎么知道network 0是什么鬼呢?上面说了有个配置文件meta_wpa_supplicant.conf,有了这个配置文件就会自动连接TE-NonSignal网络了。
上面是使用配置文件去连接网络,当然我们也可以用命令行去连接网络啦
执行scan
然后执行scan_result,下图为扫描结果
例如我们要连个公共网络OPPO-SZ,首先我们执行
add_network 如下图返回4,说明接下来要连接的network的id为4
依次执行
set_network 4 ssid "OPPO-SZ"
set_network 4 key_mgmt NONE
enable_network 4
如下图,说明成功连接上wifi了
⑥ 【原创】安卓开启WIFI调试
拿手机来调试,一天下来没多久就满电了,怕电池hold不住,找了个远程调试的办法。下面是操作步骤,给有需要的人帮助。
1、手机开启USB调试模式
2、将手机连接到电脑上
3、命令行执行adb tcpip 5555(启动手机上的adbd守护进程,并监听5555端口,默认端口为5555,可使用其它端口)
4、获取手机连接的wifi地址(命令行查看adb shell ip address show wlan0)
5、通过adb connect命令连接
注:adb connect需要和adb tcpip所使用的端口一致,如果不一致,则无法连接到该手机。
⑦ android 使用以太网 wlan0没有
可以尝试把eth0映射到wlan0,或者直接在windows里用virtualbox虚拟机安装,依靠虚拟机配置网络(hyper-v不行)
⑧ Android如何关掉wlan0
可进入手机设定-WLAN-菜单-高级设定-去掉总是允许扫描勾选
⑨ android 获取蓝牙Mac地址
android 从6.0开始,通过BluetoothAdapter.getDefaultAdapter().getAddress()获取的地址是一个固定值02:00:00:00:00:00。6.0已经对蓝牙Wi-Fi的MAC地址做了隐藏。
以下方法能正确的获取android自带蓝牙的Mac地址:
1.添加net.vidageek:mirror:1.6.1
2.实现过程
本人也尝试过其他方法获取,比如从cat /sys/class/net/wlan0/address 或者/sys/class/net/eth0/address路径获取,该方式有些手机能获取得到,有的不能或缺,获取到的Mac 地址还不一定准确。
⑩ android怎么区分wlan0,wlan1网卡
eth0,eth1,eth2……代表网卡一,网卡二,网卡三……
lo代表127.0.0.1,即localhost
wlan0代表无线网卡
在执行ifconfig 命令后,系统将在内核表中设置必要的参数,这样Linux 就知道如何与网络上的网卡通信。ifconfig 命令有以下两种格式:
※ifconfig [interface]
※ifconfig interface [aftype] option | address …
ifconfig 的第一种格式(或使用不带任何参数的ifconfig 命令)可以用来查看当前系统的网络配置情况。
在刚刚安装完系统之后,实际上是在没有网卡或者网络连接的情况下使用Linux,但通过ifconfig 可以使用回绕方式工作,使计算机认为自己工作在网络上。
现在我们运行一下ifconfig 命令,不带参数的ifconfig 命令可以显示当前启动的网络接口,其输出结果为:
[root@machine1 /sbin]#ifconfig
eth0 Link encap:Ethernet HWaddr 52:54:AB:DD:6F:61
inet addr:210.34.6.89 Bcast:210.34.6.127 Mask:255.255.255.128
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:46299 errors:0 dropped:0 overruns:0 frame:189
TX packets:3057 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
Interrupt:5 Base address:0xece0
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:3924 Metric:1
RX packets:44 errors:0 dropped:0 overruns:0 frame:0
TX packets:44 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
其中以eth0 为首的部分是本机的以太网卡配置参数,的设这里显示了网卡的设备名/dev/eth0 和硬件的MAC 地址52:54:AB:DD:6F:61, MAC 地址是生产厂家定的,每个网卡拥有的唯一地址。
不过我们可以手工改动网卡的MAC 地址,只要我们在/etc/rc.d/init.d/中的network 中加入:
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx
Jiania 解说 注:
eth0,eth1,eth2,代表网卡一,网卡二,网卡三
hw 代表hardware 硬件意思
ether 代表ethernet 以太网的意思
然后重启,此时再用ifconfig 命令查看一下,我们就会发现网卡的MAC 地址已经变成xx:xx:xx:xx:xx:xx了。
ifconfig配置网卡
配置网卡的IP地址
ifconfig eth0 192.168.0.1 netmask 255.255.255.0
在eth0上配置上192.168.0.1 的IP地址及24位掩码。 若想再在eth0上在配置一个192.168.1.1/24 的IP地址怎么办?用下面的命令
ifconfig eth0:0 192.168.1.1 netmask 255.255.255.0
这时再用ifconifg命令查看,就可以看到两个网卡的信息了,分别为:eth0和eth0:0.若还想再增加IP,那网卡的命名就接着是:eth0:1、eth0:2……想要几个就填几个。ok!
配置网卡的硬件地址
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx就将网卡的硬件地址更改了,此时你就可以骗过局域网内的IP地址邦定了。
将网卡禁用
ifconfig eth0 down
将网卡启用
ifconfig eth0 up
ifconfig 命令的功能很强大,还可以设置网卡的MTU,混杂模式等。