#!/bin/sh # Reliable local-only hotspot using Android SoftAP # 1. Turn Android Hotspot ON first # 2. Run this script IFACE="wlan1" AP_IP="192.168.43.1" NET="192.168.43.0/24" DHCP_RANGE="192.168.43.10,192.168.43.50,12h" [ "$(id -u)" -ne 0 ] && { echo "Need root"; exit 1; } if ! ip link show "$IFACE" >/dev/null 2>&1; then echo "Turn the Android Hotspot ON first, then run this script." exit 1 fi echo "[*] Taking control of Android SoftAP on $IFACE..." # Only kill DHCP, leave Android's hostapd running killall dnsmasq 2>/dev/null sleep 1 # Disable reverse path filter echo 0 > /proc/sys/net/ipv4/conf/all/rp_filter echo 0 > /proc/sys/net/ipv4/conf/$IFACE/rp_filter 2>/dev/null # Add our gateway IP (keep whatever Android already has) ip addr add $AP_IP/24 broadcast 192.168.43.255 dev $IFACE 2>/dev/null ip link set $IFACE up ip route add $NET dev $IFACE src $AP_IP 2>/dev/null # Allow traffic iptables -C INPUT -i $IFACE -j ACCEPT 2>/dev/null || iptables -I INPUT -i $IFACE -j ACCEPT iptables -C OUTPUT -o $IFACE -j ACCEPT 2>/dev/null || iptables -I OUTPUT -o $IFACE -j ACCEPT iptables -C FORWARD -i $IFACE -j ACCEPT 2>/dev/null || iptables -I FORWARD -i $IFACE -j ACCEPT iptables -C FORWARD -o $IFACE -j ACCEPT 2>/dev/null || iptables -I FORWARD -o $IFACE -j ACCEPT # Start our DHCP dnsmasq \ --interface=$IFACE \ --bind-interfaces \ --dhcp-range=$DHCP_RANGE \ --dhcp-option=3,$AP_IP \ --dhcp-option=6,$AP_IP \ --port=0 \ --no-resolv \ --pid-file=/tmp/dnsmasq-$IFACE.pid & sleep 2 echo echo "=== Local-only Hotspot Ready ===" echo "SSID & Password = whatever you set in Android Hotspot settings" echo "Gateway = $AP_IP" echo ip -4 addr show $IFACE echo echo "Connect your PC and ping 192.168.43.1"