使用Android设备作为路由器而无需蜂窝连接

9次阅读
没有评论

问题描述

希望使用没有SIM卡和蜂窝连接的Android平板电脑作为可发现的WiFi接入点。虽然知道有蜂窝连接时可以通过设置共享热点来创建一个可发现的WiFi网络,但问题是平板电脑没有蜂窝连接。用户希望在平板电脑和运行Debian Linux的小型设备之间建立一个小的WiFi局域网,并且希望平板电脑能够在其他设备可见的情况下发送和接收数据。

解决方案

请注意以下操作可能需要root权限,并且涉及到复杂的命令行操作,请谨慎执行。

方案1:使用脚本创建热点

如果您的设备已经root并且不介意使用命令行,可以使用以下脚本来创建热点网络。该脚本基于Android开源项目(AOSP)中的相关工具,适用于支持AP模式的WiFi接口。

步骤:

  1. 准备工作
  2. 确保您的设备已经root。
  3. 确认设备上的WiFi接口支持AP模式(可以通过lshwip link show检查)。

  4. 安装必要的工具

  5. 确保设备上安装了iwipiptableshostapddnsmasq等工具。如果没有,可以通过TWRP或其他方式安装这些工具。

  6. 创建热点网络

  7. 编辑热点配置文件(例如/data/local/tmp/wlan0-AP/hostapd.conf)。
  8. 设置热点名称和密码。
  9. 创建虚拟WiFi接口(例如wlan0-AP)。
  10. 配置虚拟WiFi接口的IP地址。
  11. 启动hostapd服务以创建热点。
  12. 启动dnsmasq服务以提供DHCP服务。
  13. 启动iptables规则以允许DHCP服务监听。

  14. 启动脚本
    bash
    sh /path/to/your/script.sh start

    其中/path/to/your/script.sh是保存上述脚本的路径。

示例脚本:

#!/system/bin/sh
set -e
SSID=MyAP
PASSCODE=foobarfoobar
WIFI_INTERFACE=wlan0
AP_INTERFACE=${WIFI_INTERFACE}-AP
DIR=/data/local/tmp/$AP_INTERFACE
SUBNET=192.168.43
IP=${SUBNET}.1

STOP() {
    echo 'Cleaning up...'
    pkill -15 hostapd
    pkill -15 wpa_supplicant
    pkill -15 dnsmasq
    ip rule del lookup main
    iptables -D INPUT -i $AP_INTERFACE -p udp -m udp --dport 67 -j ACCEPT
    iw $AP_INTERFACE del
    rm -rf $DIR
}

if [ "$1" = stop ]; then
    STOP || true
    exit
elif [ "$1" != start ]; then
    echo 'Usage:' >&2
    printf '\t%s\n' "$(basename "$0") start|stop" >&2
    exit 1
fi

if ! iw phy | grep -A10 'Supported interface modes:' | grep -q '\*[ ]*AP'; then
    echo 'AP mode not supported.' >&2
    exit 1
fi

if ! iw dev $WIFI_INTERFACE link | grep -q '^Not connected'; then
    echo 'First disconnect form Wi-Fi.' >&2
    exit 1
fi

STOP || true

if ! iw dev $WIFI_INTERFACE interface add $AP_INTERFACE type __ap; then
    echo 'Couldn\'t create AP interface.' >&2
    exit 1
fi

echo 'Configuring network...'
ip link set up dev $AP_INTERFACE
ip addr add ${IP}/24 broadcast ${SUBNET}.255 dev $AP_INTERFACE
ip rule add lookup main

cat <<EOF >$DIR/hostapd.conf
ssid=$SSID
wpa_passphrase=$PASSCODE
interface=$AP_INTERFACE
driver=nl80211
hw_mode=g
channel=1
wpa_key_mgmt=WPA-PSK
wpa=2
EOF

echo 'Starting hostapd...'
hostapd -B $DIR/hostapd.conf

cat <<EOF >$DIR/dnsmasq.conf
port=0
dhcp-option=6,1.1.1.1,1.0.0.1
dhcp-range=$IP,${SUBNET}.254,24h
dhcp-leasefile=$DIR/dnsmasq.leases
dhcp-authoritative
no-hosts
no-resolv
EOF

iptables -I INPUT -i $AP_INTERFACE -p udp -m udp --dport 67 -j ACCEPT

echo 'Starting DHCP server...'
dnsmasq -C $DIR/dnsmasq.conf &lt;/dev/null
echo Done.

方案2:使用WiFi Direct

如果不需要互联网访问,可以考虑使用WiFi Direct功能。大多数现代Android设备都支持WiFi Direct,可以通过设备的设置菜单直接启用。

步骤:

  1. 打开设备的“设置”应用。
  2. 选择“无线和网络”或“更多网络选项”。
  3. 找到“WiFi Direct”或“个人热点”选项。
  4. 启用WiFi Direct并创建一个网络。
  5. 让Debian设备尝试连接到创建的网络。

注意事项:

  • 确保Debian设备支持WiFi Direct并且正确配置。
  • 如果Debian设备无法发现WiFi Direct网络,请检查设备的WiFi Direct功能是否正常工作。

通过上述方法,您可以使用Android设备作为路由器来创建一个小型的WiFi局域网。

正文完