8 votes

Comment utiliser le Wi-Fi et le hotspot en même temps sur Android ?

Est-il possible de créer un hotspot Wi-Fi à partir d'un appareil Android en utilisant sa connexion Wi-Fi plutôt que les données cellulaires ?

Sans l'aide d'une application tierce (comme Netshare), en modifiant un code dans l'application de paramétrage ?


J'ai l'AOSP 7.0 donc il n'y a pas de question sur l'appareil racine.

8voto

Irfan Latif Points 16863

WI-FI REPEATER MODE ON Android

Je ne connais pas d'outil direct autre que les applications Android (qui utilisent Wi-Fi Direct) qui permettent d'utiliser le wi-fi et le hotspot en même temps. Ce n'est pas non plus une fonctionnalité standard introduite dans les ROM personnalisées jusqu'à présent (AFAIK). Cependant, vous pouvez le faire manuellement si vous êtes à l'aise avec l'utilisation de la ligne de commande. Mais ce n'est PAS possible sans Root.

CE DONT NOUS AVONS BESOIN

  • Appareil enraciné

  • Le dispositif doit prendre en charge nl80211 driver

    Tous les appareils récents équipés d'un chipset Qualcomm MSM sont compatibles avec cette fonctionnalité, par exemple le Redmi Note 4 (mido) de Xiaomi, qui est équipé d'un chipset Qualcomm MSM. MSM8953 .

    Le noyau doit également prendre en charge ce pilote. Pour confirmer :

    ~# zcat /proc/config.gz | grep CONFIG_CFG80211
    CONFIG_CFG80211=y
    
    ~# lshw | grep wireless=
           configuration: broadcast=yes driver=wcnss_wlan multicast=yes wireless=Qcom:802.11n
  • Le dispositif doit prendre en charge managed et AP en même temps.

    ~# iw phy | grep -iA2 'valid interface combinations'
            valid interface combinations:
             * #{ managed } <= 3, #{ IBSS, AP } <= 1, #{ P2P-client, P2P-GO } <= 1,
               total <= 3, #channels <= 1

    Cela signifie que votre puce sans fil permet de créer au maximum 3 interfaces, dont l'une peut être en AP et d'autres sont en mode managed o P2P et au maximum 1 canal est soutenu. Si la valeur des canaux est 2, vous pouvez faire fonctionner les deux interfaces sur des canaux différents. Cependant, il est recommandé d'utiliser le même canal pour éviter les interférences.

    Interface wi-fi standard sur les appareils Android (généralement wlan0 ) est toujours exécuté dans managed mode. Nous allons créer une interface virtuelle sans fil qui sera exécutée en AP mode.

  • Outils Linux : iw , ip , iptables , hostapd , dnsmasq etc.

    Vous pouvez également utiliser wpa_supplicant à la place de hostapd avec une configuration légèrement différente.

    Habituellement, ces binaires sont fournis avec Android. Cependant, des modifications sont apportées par Google et les vendeurs pour adapter ces outils aux besoins d'Android. Ils peuvent donc ne pas se comporter comme des outils Linux standard et, dans de rares cas, vous devrez peut-être les compiler à partir des sources.

    Les outils sans fil doivent être suffisamment récents pour prendre en charge les pilotes. nl80211 .

  • Emulateur de terminal (Termux en est un bon)

ÉTAPES :

Pour faciliter l'utilisation, j'ai résumé toutes les étapes dans un script shell avec une brève explication. Vous pouvez le mettre dans votre $PATH, par exemple. /system/bin/android_ap et l'exécuter directement : ~# android_ap start . A Paramètres rapides personnalisés La tuile peut également être créé pour faciliter l'utilisation.

#!/system/bin/sh
set -e
#set -x

[ "$(id -u)" != 0 ] && echo 'Not running as root!' && exit

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 (lshw | grep -A10 Wireless | grep 'logical name')
SUBNET=192.168.42                   # must be different than WIFI_INTERFACE
AP_INTERFACE=${WIFI_INTERFACE}-AP
IP=${SUBNET}.1
DIR=/data/local/tmp/$AP_INTERFACE

USAGE()
{
    echo 'Usage:'
    printf '\t%s\n' "$(basename "$0") start|stop"
    exit
}

STOP() {
    # hope there are no other instances of same daemons
    pkill -15 hostapd dnsmasq
    # remove iptables rules
    iptables -D INPUT -i $AP_INTERFACE -p udp -m udp --dport 67 -j ACCEPT
    iptables -t nat -D POSTROUTING -s ${SUBNET}.0/24 ! -o $AP_INTERFACE -j MASQUERADE
    iptables -D FORWARD -i $AP_INTERFACE -s ${IP}/24 -j ACCEPT
    iptables -D FORWARD -i $WIFI_INTERFACE -d ${SUBNET}.0/24 -j ACCEPT
    # delete AP interface
    ip link show | grep "${AP_INTERFACE}:" && iw $AP_INTERFACE del
    rm -rf $DIR
} >/dev/null 2>&1

CHECKS()
{
    for binary in iw ip iptables hostapd dnsmasq; do
        which $binary >/dev/null && continue
        exit
    done

    # this check is necessary if need to use single channel
    if iw dev $WIFI_INTERFACE link | grep -q '^Not connected'
    then
        echo 'First connect to Wi-Fi for internet sharing.'
        exit
    fi

    if ! iw phy | grep -iqE '{.*managed.*AP.*}' && ! iw phy | grep -iqE '{.*AP.*managed.*}'
    then
        echo 'AP mode not supported.'
        exit
    fi
}

CREATE_AP()
{
    if ! iw dev $WIFI_INTERFACE interface add $AP_INTERFACE type __ap
    then
        echo "Couldn't create AP."  # :(
        exit
    fi
}

FIND_CHANNEL()
{
    # find what channel wi-fi is using
    CHANNEL="$(iw $WIFI_INTERFACE scan | grep -C5 "$(iw $WIFI_INTERFACE link | grep SSID | cut -d: -f2-)" | grep -i channel | tail -c3)"
    if [ -z "$CHANNEL" ]
    then
        echo  "Couldn't find channel info. Are you are connected to Wi-Fi?"
        STOP
        exit
    fi

    # if more than 1 channels are supported, use any frequency
    [ ! -z "$CHANNEL" ] || CHANNEL=11
}

ADD_IP_ROUTE()
{
    # activate the interface and add IP
    ip link set up dev $AP_INTERFACE
    ip addr add ${IP}/24 broadcast ${SUBNET}.255 dev $AP_INTERFACE

    # routing table 97 needs to be put necessarily on Android
    # because in main table, route for $WIFI_INTERFACE takes priority (ip route show)
    # and all traffic goes there ignoring $AP_INTERFACE
    ip route add ${SUBNET}.0/24 dev $AP_INTERFACE table 97
}

HOSTAPD_CONFIG()
{
    mkdir -p "$DIR"
    cat <<-EOF >$DIR/hostapd.conf
        # network name
        ssid=$SSID
        # network interface to listen on
        interface=$AP_INTERFACE
        # wi-fi driver
        driver=nl80211
        # WLAN channel to use
        channel=$CHANNEL
        # ser operation mode, what frequency to use
        hw_mode=g
        # enforce Wireless Protected Access (WPA)
        wpa=2
        # passphrase to use for protected access
        wpa_passphrase=$PASSCODE
        # WPA protocol
        wpa_key_mgmt=WPA-PSK
    EOF

    # you can tune other parameters such as mtu, beacon_int, ieee80211n, wowlan_triggers (if supported)
    # for better performace and options such as *_pairwise for better security
}

INTERNET_SHARE()
{
    # allow IP forwarding
    echo 1 >/proc/sys/net/ipv4/ip_forward
    # route and allow forwrding through firewall
    iptables -t nat -I POSTROUTING -s ${SUBNET}.0/24 ! -o $AP_INTERFACE -j MASQUERADE
    iptables -I FORWARD -i $AP_INTERFACE -s ${IP}/24 -j ACCEPT
    iptables -I FORWARD -i $WIFI_INTERFACE -d ${SUBNET}.0/24 -j ACCEPT
}

DHCP_SERVER()
{
    # configuration
    cat <<-EOF >$DIR/dnsmasq.conf
        # we dont want DNS server, only DHCP
        port=0
        # only listen on AP interface
        interface=$AP_INTERFACE
        listen-address=$IP

        #bind-interfaces

        # range of IPs to make available to wlan devices andwhen to renew IP
        dhcp-range=$IP,${SUBNET}.254,24h
        # where to save leases
        dhcp-leasefile=$DIR/dnsmasq.leases
        # set default gateway
        dhcp-option-force=option:router,$IP
        # add OpenDNS servers for DNS lookup to announce
        dhcp-option-force=option:dns-server,208.67.220.220,208.67.222.222

        #dhcp-option-force=option:mtu,1500

        # respond to a client who is requesting from a different IP broadcast subnet
        # or requesting an out of range / occupied IP
        # or requesting an IP from expired lease of previous sessions
        # or obtained from some other server which is offline now
        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

    # start dhcp server
    dnsmasq -C $DIR/dnsmasq.conf
}

if [ "$1" = stop ]
then
    STOP || true
    exit
fi

[ "$1" = start ] || USAGE

# basic check
CHECKS
# stop running instances
STOP || true
# create virtual wireless interface
CREATE_AP
# find channed already used ny wi-fi
FIND_CHANNEL
# configre newly created interface
ADD_IP_ROUTE
# configure acces point daemon
HOSTAPD_CONFIG
# start hostapd
hostapd -B $DIR/hostapd.conf
# share internet from Wi-Fi to AP
INTERNET_SHARE
# run a dhcp server to assign IP's dynamically
# otherwise assign a static IP to connected device in subnet range (2 to 254)
DHCP_SERVER

echo Done.

SOURCES :

3voto

navigaid Points 111

Il existe une application appelée VPN Hopspot - Tethering/Wi-Fi repeater sur Google Play, il est en source ouverte sur GitHub à l'adresse suivante aquí . Devrait fonctionner sur la plupart des appareils Android récents alimentés par snapdragon SoC (Root requis).

Avertissement : je ne suis pas affilié à cette application.

0voto

MEDLEY Points 20

Vous ne pouvez pas simplement le faire sans Root. Mais vous pouvez utiliser le tethering USB et BlueTooth en utilisant un réseau Wi-Fi. Je suggérerais d'utiliser le BlueTooth tethering si vous voulez partager l'internet sur d'autres téléphones parce que c'est un désordre de faire tout cela pour utiliser le Wi-Fi et le hotspot en même temps.

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X