Si vous avez un accès Root et que cela ne vous dérange pas de travailler en CLI, une version plus courte du script utilisé pour Comment utiliser Android en mode répéteur Wi-Fi ? peut être utilisé pour créer un réseau hotspot à condition que votre interface WiFi prenne en charge le mode AP :
#!/system/bin/sh
set -e
#set -x
# this scripts creates a hotspot network
[ "$(id -u)" = 0 ] || { echo 'Not running as root!' >&2; exit 1; }
# check required binaries are on PATH
for bin in iw ip iptables hostapd dnsmasq
do
! which $bin >/dev/null || continue
echo "$bin not found." >&2
exit 1
done
####################
# define variables #
####################
SSID=MyAP # set this to your desired string (avoid spaces and non-ascii characters)
PASSCODE=foobarfoobar # set this to your desired string (8 to 63 characters)
WIFI_INTERFACE=wlan0 # set this according to your device (check with 'lshw' or 'ip link show')
AP_INTERFACE=${WIFI_INTERFACE}-AP
DIR=/data/local/tmp/$AP_INTERFACE
SUBNET=192.168.43
IP=${SUBNET}.1
##########################
# start / stop tethering #
##########################
STOP()
(
echo 'Cleaning up...'
# don't print error messages
exec >/dev/null 2>&1
# hope there are no other instances of same daemons
pkill -15 hostapd
pkill -15 wpa_supplicant
pkill -15 dnsmasq
# remove RPDB rule and iptables rule
ip rule del lookup main
iptables -D INPUT -i $AP_INTERFACE -p udp -m udp --dport 67 -j ACCEPT
# delete AP interface
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
################
# basic checks #
################
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 running instances #
##########################
STOP || true
#####################################
# create virtual wireless interface #
#####################################
if ! iw dev $WIFI_INTERFACE interface add $AP_INTERFACE type __ap
then
echo "Couldn't create AP interface." >&2
exit 1
fi
#####################################
# configure newly created interface #
#####################################
echo 'Configuring network...'
# activate the interface and add IP
ip link set up dev $AP_INTERFACE
ip addr add ${IP}/24 broadcast ${SUBNET}.255 dev $AP_INTERFACE
# Android doesn't look up into main table by default
ip rule add lookup main
#######################
# access point daemon #
#######################
# create configuration file
mkdir -p "$DIR"
cat <<-EOF >$DIR/hostapd.conf
# network name
ssid=$SSID
# passphrase to use for protected access
wpa_passphrase=$PASSCODE
# network interface to listen on
interface=$AP_INTERFACE
# wi-fi driver
driver=nl80211
# set operation mode, 'g' for 2.4GHz band
hw_mode=g
# WLAN frequency channel to use
channel=1
# key management protocol; use pre-share key
wpa_key_mgmt=WPA-PSK
# enforce WPA2
wpa=2
EOF
echo 'Starting hostapd...'
hostapd -B $DIR/hostapd.conf
################################################
# run a dhcp server to assign IP's dynamically #
################################################
# create configuration file
cat <<-EOF >$DIR/dnsmasq.conf
# we dont want DNS server, only DHCP
port=0
# nameservers to be sent to clients
dhcp-option=6,1.1.1.1,1.0.0.1
# range of IPs to make available to wlan devices and when to renew IP
dhcp-range=$IP,${SUBNET}.254,24h
# where to save leases
dhcp-leasefile=$DIR/dnsmasq.leases
# respond to requests from a different IP broadcast subnet
dhcp-authoritative
# don't look for any hosts file and resolv file
no-hosts
no-resolv
EOF
# open listening port
iptables -I INPUT -i $AP_INTERFACE -p udp -m udp --dport 67 -j ACCEPT
echo 'Starting DHCP server...'
dnsmasq -C $DIR/dnsmasq.conf </dev/null
echo Done.
Maintenant vous pouvez vous connecter au point d'accès MyAP
en utilisant la clé foobarfoobar
.
wpa_supplicant
peut également être utilisé à la place de hostapd
pour des cas simples comme le nôtre, mais celui qui est livré avec Android ne semble pas fonctionner. Vous devez compiler le binaire à partir des sources, ou essayer celui-ci . La configuration est encore plus simple :
...
#######################
# access point daemon #
#######################
# create configuration file
mkdir -p $DIR/wpa_supplicant
cat <<-EOF >$DIR/wpa_supplicant.conf
ctrl_interface=$DIR/wpa_supplicant
network={
ssid="MyAP"
psk="foobarfoobar"
# force create AP network
ap_scan=2
# key management protocol; use pre-share key
key_mgmt=WPA-PSK
# enforce WPA2
proto=RSA
# set mode to AP
mode=2
# channel frequency
frequency=2412
}
EOF
echo 'Starting wpa_supplicant in AP mode...'
wpa_supplicant -B -D nl80211 -i $AP_INTERFACE -c $DIR/wpa_supplicant.conf
...
-
hostapd
, wpa_supplicant
y dnsmasq
tous font partie de l'AOSP. hostapd
est utilisé pour la connexion sans fil, wpa_supplicant
pour les connexions WiFi et dnsmasq
comme serveur DHCP/DNS (jusqu'à Pie).
-
dnsmasq
n'est pas nécessaire si vous préférez une configuration IP statique.
- Si votre appareil ne contient pas
hostapd
vous pouvez en obtenir un à partir d'un autre appareil ou compiler à partir des sources, ou encore essayer celui-ci .
- Pour plus d'options de configuration, voir
hostapd.conf
, dnsmasq.conf
y wpa_supplicant.conf
. Voir le détail des canaux WiFi aquí .
- Assurez-vous également que les deux
hostapd
(fonctionne avec UID 1010
AID_WIFI
) et dnsmasq
(passe à l'UID 9999
AID_NOBODY
) sont capables d'établir des connexions sortantes à travers le pare-feu.
- SELinux peut également causer des problèmes avec cette configuration manuelle, donc définissez
permissive
à des fins de test ou pour définir des règles de politique.
- Puisque vous n'avez pas l'intention d'utiliser Internet, il n'est pas nécessaire de configurer le NAT et le transfert de paquets.
PS :
Si vous disposez d'une connexion cellulaire, la seule chose supplémentaire à faire est de partager l'internet. Pour les étapes supplémentaires, voir Comment créer un hotspot WiFi à partir du terminal ?