玩转Android之无线连网和远程控制

在android上的term个人认为最好用的当属Android-Terminal-Emulator了。
不过触屏的爪机打起英文来真是蛋疼,还是通过电脑来操作比较爽,因此,就有了在android上安装sshd的想法了,然后通过无线与笔记本连接起来,再登录ssh,爽YY啊。
虽说用adb shell也可弹出一个shell来的,但那个得装个android sdk …
然后是上网啦,移动的流量刷刷d,心痛啊。通过笔记本的无线网卡上wifi,让网络资源得到充分利用。
由于有了wifi和ssh,sftp,传文件也不用插usb了,直接通过无线传即可。

这里我把方法记录一下,有喜欢折腾的童鞋可参考一二。

以下操作,root权限是必须的。

无线网络连接是从笔记本电脑连接手机的ssh和sftp的必要条件,因此先弄好无线。

0×01.搞定无线连接

a.ad-hoc方案
在笔记本上建立ad-hoc连接,等待爪机去连。
我刷的系统是基于CyanogenMod 7 修改的,默认已经支持Ad-hoc网络了(2.x默认是不能识别ad-hoc网络的),因此,免去了一大麻烦。
如不支持,可去网上下wpa_supplicant的patch过后的5.0或6.0版。怎么查看手机wpa_supplicant的版本?

1
wpa_supplicant -v

ad-hoc方案是用于xp系统和linux下不支持master模式的无线网卡这两种情况的。如果你只用win7的话,大可不必担心ad-hoc这个问题了。我的intel无线网卡在Linux下不支持master(AP)模式,因此只能用ad-hoc来带手机了。
因此现在的主要任务是如何在笔记本上建立对等网的连接。

windows下面对等网的建立比较简单,可用netsh或点击鼠标搞定。
我目前已经没有保留xp了,简单地说下win7下组建对等网的方法:
进入“网络和共享中心”
选择“设置新的连接或网络”
在向导中选择“设置无线临时(计算机到计算机)网络”,点击 下一步
输入“网络名”以及“安全密钥”(这里也可不设置密钥,这样手机可不用输入密钥直接连接上),并点击“下一步”
单击“启用Internet连接共享”按钮,以开启共享网络
xp下面与此类似。

linux下面:

1
2
3
4
5
6
ifconfig wlan0 up
ifconfig wlan0 192.168.137.1 netmask 255.255.255.0
iwconfig wlan0 mode ad-hoc
iwconfig wlan0 channel auto
iwconfig wlan0 essid hyadhoc
iwconfig wlan0 key open

为什么要设置137这个网段呢?这个是为了偷懒的。因为在windows 7下面建立软件AP时系统默认设置的ip就是这个段的,而且,有时候,这个ip不可以修改,并且,假如你不想在windows下面装dhcp的话,那么爪机就得设置为使用静态ip了,设置为这个段方便在各个系统里面使用。

好了,现在Linux下面已经建立了一个等待连接的ad-hoc连接,开放式,无需密码。
然后是dhcp配置了,经测试,cm 7 (我现在用的android版本为 2.3.7)确实可以发现ad-hoc网络,不过使用静态ip去连ad-hoc却是不行的。
表现的情况为:不断重复“连接”/“断开”,根本没法用。。。
于是我配置了dncp,这下一连接上就ok了,稳定了。

我用的archlinux,

1
sudo pacman -S --needed dhcp

然后稍微配置下:

1
2
3
4
5
6
7
8
9
10
sudo vim /etc/dhcpd.conf
subnet 192.168.137.0 netmask 255.255.255.0 {
  range 192.168.137.26 192.168.137.30;
  option domain-name-servers 192.168.137.1,8.8.8.8;
  option domain-name "internal.huangye.com";
  option routers 192.168.137.1;
  option broadcast-address 192.168.137.255;
  default-lease-time 600;
  max-lease-time 7200;
}

一定要配置网关和dns,不然android爪机没法上网。
192.168.137.1,8.8.8.8 是两个dns,前面那个是本机无线网卡的ip,为什么用本机?在天朝,你懂的。当然,如果你不想搞dns的话,就填写isp的dns ip吧。
其实呢,这里的ip段设置为 192.168.137.26/30就ok了,这样刚好有两个ip地址,别人插不进来,呵呵。
同样,用24位的网络号是偷懒,呵呵。

打开爪机的无线网络设置,应该可以看到ssid为hyadhoc的连接了。连接成功后可以看到爪机获取到的ip地址。
对于xp的话,可以使用静态ip试一下(我没有测试,估计不可行),如不行的话,放个小dhcp服务器就Ok了。不用整那么大的块头的东西,用tftpd那个小工具里的dhcp功能就ok了。以前我ghost网克时用它来做tftp和dhcp服务器。
还找到一个用于windows的小巧的dncp服务器daemon: dhcp server
android 通过windows dhcp server获取ip 图:

b.软AP方案
此方案适合 windows 7 且网卡支持“承载网络” || Linux 且网卡支持Master模式的 情况。
win7架软ap:
丢个脚本吧:

1
2
3
4
5
6
7
8
9
10
11
@echo off
color f2
::netsh wlan show drivers
::netsh wlan set hostednetwork mode=allow
::netsh wlan set hostednetwork ssid=huangye key=密钥

net start ALG
net start RasAuto
net start MpsSvc
netsh wlan start hostednetwork
pause

注释部分的表示只需要执行一次的命令,其它的每次系统重启后都要执行才能开启承载网络。
如有线网卡是有互联网访问权限的话,将此网络共享给无线软件ap的网络连接即可。

对于linux下软ap的设置,前面我已经写过一篇文章了:《Linux下用hostapd架无线AP
这里不再述。

为了验证一下连接是否正常,ping一下:
打开 terminal emulator,然后 ping -c4 192.168.137.1

0×02.让爪机共享笔记本的网络
现在虽然连接上了,爪机却是不可以上网的。
对于winxp或win7,其实上面已经说到了。
可以在网卡属性里面把有线网卡的网络共享给你设置了对等网络的那个连接,这样就ok了。
对于linux,可用iptables搞定。
你如果偷懒,可用一句搞定:

1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

不过我不太喜欢用MASQUERADE。
其中a.b.c.d是本机有线网卡的ip,此有线网卡是连接了互联网的。wlan0为ad-hoc网卡。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/bin/sh
iptables -F
iptables -t nat -F
iptables -t filter -P FORWARD DROP
#忽略RESET报文
iptables -A INPUT -p tcp --tcp-flags RST RST -j DROP
iptables -A INPUT -i eth0 -j ACCEPT
iptables -A INPUT -i wlan0 -j ACCEPT
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -i wlan0 -m state --state ESTABLISHED,RELATED -j ACCEPT
#客户端MAC绑定
iptables -A FORWARD -m mac --mac-source 这里是你的爪机无线网卡的mac地址 -j ACCEPT
iptables -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT
#iptables nat 透明代xx理
iptables -t nat -A POSTROUTING -o eth0 -s 192.168.137.0/24 -j SNAT --to a.b.c.d
#开启内核转发功能
#echo 1 >/proc/sys/net/ipv4/ip_forward

注意若你的机子没有开启转发功能的话,别忘记开启一下。

好了,现在流量无限,想下啥,就下啥。 :twisted:

0×02.ssh 和sftp

这里在android上架设ssh服务端我用的是SSHDroid 这个免费app,可到market下载安装。sshd可随时停止和启动,亦可开机自启动(我可不会这么做,我电池才1350 mAh)。软件使用很简单,基本无需配置,安装后记得设置一个密码就ok了。
装上这个以后,可以从笔记本通过ssh和sftp访问爪机啦。
要修改文件什么的,或者传东西到sd卡里面,现在都不用插USB了,直接无线搞定。

ssh账号名为root,ip即是手机无线网卡的当前ip.密码即是刚才设定的密码。sftp也是一样。

登录后软件提示:
Use ‘root’ on rooted devices otherwise any username works ,说如果没有root的话用户名随便填写。
登录了:

查看所有接口:

查看无线网络接口:

通过sftp传文件:

由于sftp是加密链接,因此传输速率可能不会非常理想,我目前测试过,基本上可以稳定在160kB/s 以上。

另外,android中还有另外一个sshd软件(收费的): Quicksshd
cm wiki面也介绍了一种方法:http://wiki.cyanogenmod.com/wiki/Howto:_Connect_to_Device_with_SSH

更多
One Response Post a comment

Leave a Reply

Note: You may use basic HTML in your comments. Your email address will not be published.

Subscribe to this comment feed via RSS