176 lines
4.2 KiB
Bash
176 lines
4.2 KiB
Bash
#!/bin/sh
|
|
|
|
. /etc/profile
|
|
|
|
gen_hostapd_conf() {
|
|
ssid="${1}"
|
|
pass="${2}"
|
|
echo "ctrl_interface=/var/run/hostapd"
|
|
echo "ctrl_interface_group=0"
|
|
echo "ssid=${ssid}"
|
|
echo "hw_mode=g"
|
|
echo "channel=1"
|
|
echo "beacon_int=100"
|
|
echo "dtim_period=2"
|
|
echo "max_num_sta=255"
|
|
echo "rts_threshold=-1"
|
|
echo "fragm_threshold=-1"
|
|
echo "macaddr_acl=0"
|
|
echo "auth_algs=3"
|
|
echo "wpa=2"
|
|
echo "wpa_passphrase=${pass}"
|
|
echo "ieee80211n=1"
|
|
}
|
|
|
|
gen_udhcpd_conf() {
|
|
interface=${1}
|
|
ipv4_prefix=${2}
|
|
echo "start ${ipv4_prefix}.100"
|
|
echo "end ${ipv4_prefix}.200"
|
|
echo "interface ${interface}"
|
|
echo "pidfile /var/run/udhcpd.${interface}.pid"
|
|
echo "lease_file /var/lib/misc/udhcpd.${interface}.leases"
|
|
echo "option subnet 255.255.255.0"
|
|
echo "option lease 864000"
|
|
}
|
|
|
|
gen_dnsmasq_conf() {
|
|
ipv4_prefix=${1}
|
|
echo "bind-interfaces"
|
|
echo "interface=wlan0"
|
|
echo "address=/config.kvm/${ipv4_prefix}.1"
|
|
echo "no-hosts"
|
|
echo "dhcp-range=${ipv4_prefix}.2,${ipv4_prefix}.254"
|
|
echo "dhcp-option=6,${ipv4_prefix}.1"
|
|
echo "dhcp-option=3,${ipv4_prefix}.1"
|
|
echo "dhcp-authoritative"
|
|
}
|
|
|
|
start() {
|
|
echo "wifi mode: sta"
|
|
ssid=""
|
|
pass=""
|
|
if [ -e /boot/wifi.ssid ] && [ -e /boot/wifi.pass ]; then
|
|
echo "Updating WiFi credentials from /boot to /etc/kvm/"
|
|
|
|
rm -f /etc/kvm/wifi.ssid /etc/kvm/wifi.pass
|
|
|
|
mv /boot/wifi.ssid /etc/kvm/wifi.ssid
|
|
mv /boot/wifi.pass /etc/kvm/wifi.pass
|
|
|
|
chown root:root /etc/kvm/wifi.ssid /etc/kvm/wifi.pass
|
|
chmod 644 /etc/kvm/wifi.ssid /etc/kvm/wifi.pass
|
|
fi
|
|
if [ -e /etc/kvm/wifi.ssid ]
|
|
then
|
|
ssid=`cat /etc/kvm/wifi.ssid`
|
|
fi
|
|
if [ -e /etc/kvm/wifi.pass ]
|
|
then
|
|
pass=`cat /etc/kvm/wifi.pass`
|
|
fi
|
|
echo "ctrl_interface=/var/run/wpa_supplicant" > /etc/wpa_supplicant.conf
|
|
wpa_passphrase "$ssid" "$pass" >> /etc/wpa_supplicant.conf
|
|
wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant.conf
|
|
if [ ! -e /boot/wifi.nodhcp ]
|
|
then
|
|
(udhcpc -i wlan0 -t 10 -T 1 -A 5 -b -p /run/udhcpc.wlan0.pid) &
|
|
fi
|
|
}
|
|
|
|
ap_start() {
|
|
echo "wifi mode: ap"
|
|
id2=$(printf "%d" 0x$(sha512sum /sys/class/cvi-base/base_uid | head -c 2))
|
|
id3=$(printf "%d" 0x$(sha512sum /sys/class/cvi-base/base_uid | head -c 4 | tail -c 2))
|
|
if [ "$id2" = "$id3" ]
|
|
then
|
|
id2=$((id2 + 1))
|
|
fi
|
|
if [ "$id2" -ge 255 ]
|
|
then
|
|
id2=253
|
|
fi
|
|
if [ "$id3" -ge 255 ]
|
|
then
|
|
id3=254
|
|
fi
|
|
ssid=""
|
|
pass=""
|
|
if [ -e /kvmapp/kvm/ap.ssid ]
|
|
then
|
|
ssid=`cat /kvmapp/kvm/ap.ssid`
|
|
fi
|
|
if [ -e /kvmapp/kvm/ap.pass ]
|
|
then
|
|
pass=`cat /kvmapp/kvm/ap.pass`
|
|
fi
|
|
gen_hostapd_conf "$ssid" "$pass" > /etc/hostapd.conf
|
|
ipv4_prefix=10.$id3.$id2
|
|
if [ ! -e /etc/udhcpd.wlan0.conf ]
|
|
then
|
|
gen_udhcpd_conf wlan0 "${ipv4_prefix}" > /etc/udhcpd.wlan0.conf
|
|
fi
|
|
# gen_dnsmasq_conf "${ipv4_prefix}" > /etc/dnsmasq.conf
|
|
|
|
# iptables --policy INPUT ACCEPT
|
|
# iptables --policy FORWARD ACCEPT
|
|
# iptables --policy OUTPUT ACCEPT
|
|
# iptables -F
|
|
# iptables -t nat -F
|
|
# iptables -t nat -A PREROUTING -i wlan0 -p udp --dport 53 -j DNAT --to ${ipv4_prefix}.1
|
|
|
|
ifconfig wlan0 up
|
|
ip route del default || true
|
|
ip add flush dev wlan0
|
|
ip addr add $ipv4_prefix.1/24 dev wlan0
|
|
# dnsmasq --pid-file=/tmp/dnsmasq.run -C /etc/dnsmasq.conf
|
|
hostapd -B -i wlan0 /etc/hostapd.conf
|
|
udhcpd -S /etc/udhcpd.wlan0.conf
|
|
}
|
|
|
|
stop() {
|
|
ps -ef|grep hostapd|grep -v grep|awk '{print $1}'|xargs kill -2 || true
|
|
ps -ef|grep "udhcpd -S /etc/udhcpd.wlan0.conf" |grep -v grep|awk '{print $1}'|xargs kill -2 || true
|
|
killall wpa_supplicant || true
|
|
if [ -e /run/udhcpc.wlan0.pid ]
|
|
then
|
|
kill `cat /run/udhcpc.wlan0.pid` || true
|
|
rm -f /run/udhcpc.wlan0.pid
|
|
fi
|
|
if [ -e /var/run/udhcpd.wlan0.pid ]
|
|
then
|
|
kill `cat /var/run/udhcpd.wlan0.pid` || true
|
|
rm -f /var/run/udhcpd.wlan0.pid
|
|
fi
|
|
if [ -e /tmp/dnsmasq.run ]
|
|
then
|
|
kill `cat /tmp/dnsmasq.run` || true
|
|
rm -f /tmp/dnsmasq.run
|
|
fi
|
|
# if [ -e /etc/wpa_supplicant.conf]
|
|
# then
|
|
# echo > /etc/wpa_supplicant.conf
|
|
# fi
|
|
airmon-ng stop wlan0mon || true
|
|
}
|
|
|
|
restart() {
|
|
stop
|
|
start
|
|
}
|
|
|
|
if [ "${1}" = "start" ]
|
|
then
|
|
start
|
|
elif [ "${1}" = "stop" ]
|
|
then
|
|
stop
|
|
elif [ "${1}" = "ap" ]
|
|
then
|
|
stop
|
|
ap_start
|
|
elif [ "${1}" = "restart" ]
|
|
then
|
|
restart
|
|
fi
|