| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190 |
- #!/bin/sh
- # Copyright (C) 2023 DSR!
- COMMANDS="format_sd correct_sd_mount missing_packages theme_install set_panel_port set_router_ip set_pineap_interface handle_lost_phys"
- HELP="
- Available commands:
- format_sd Format SD/pendrive for use with Pineapple
- correct_sd_mount Fix ghost SD/pendrive issues
- missing_packages Install the missing OpenWRT packages
- theme_install Deploys the tool to change panel theme
- set_panel_port Change the port used by panel
- set_router_ip Change the IP used by the hardware
- set_pineap_interface Change the interface used by PineAP
- handle_lost_phys Fix unrecognized wifi interfaces
- "
- PACKAGES="python-logging python-openssl python-sqlite3 python-codecs"
- to_logger() {
- logger -s -t wpc "$1"
- }
- format_sd() {
- to_logger "[+] Formatting SD using the panel script..."
- /pineapple/modules/Advanced/formatSD/format_sd
- to_logger "Process finished. Read the log to see if it was completed correctly."
- to_logger "The partition may take a few seconds to become available."
- }
- correct_sd_mount() {
- SD_STATUS=$(/bin/mount | /bin/grep "on /sd" -c)
- SD_COUNT=$(ls /sd | wc -l)
- if [[ -d /sd && $SD_STATUS == "0" && $SD_COUNT == "0" ]]; then
- to_logger "[+] Fix sd status"
- rm -rf /sd
- fi
- }
- missing_packages() {
- if [[ ! -d "/usr/lib/python2.7" && ! -d "/sd/usr/lib/python2.7" ]]; then
- FREE_SPACE=$(df / | tail -1 | awk '{print $4}')
- if [[ ! -d /sd && $FREE_SPACE -lt 10240 ]]; then
- to_logger "[!] There is not enough space to install the packages"
- elif ping -q -c 1 -W 1 1.1.1.1 >/dev/null; then
- to_logger "[+] Installing missing packages..."
- INSTALL_ROUTE="--dest sd"
- if [[ $FREE_SPACE -gt 10240 ]]; then
- INSTALL_ROUTE=""
- to_logger "[*] Found available space in the system partition"
- fi
- opkg update && opkg $INSTALL_ROUTE install $PACKAGES && python -m compileall
- if [[ ! -d "/usr/lib/python2.7" && ! -d "/sd/usr/lib/python2.7" ]]; then
- to_logger "[!] Packages were not installed!"
- else
- to_logger "[*] Install Complete!"
- fi
- else
- to_logger "[!] Connect to the internet and run \"wpc-tools missing_packages\" command!"
- fi
- fi
- }
- theme_install() {
- to_logger "[+] Downloading theme manager..."
- wget -q "https://raw.githubusercontent.com/xchwarze/wifi-pineapple-community/main/themes/install.sh" -O /tmp/theme-install.sh
- chmod +x /tmp/theme-install.sh
- to_logger "[*] By running /tmp/theme-install.sh you will be able to see the available themes and choose the one you want"
- /tmp/theme-install.sh "$1"
- }
- set_panel_port() {
- new_port="$1"
- config_file="/etc/nginx/nginx.conf"
- if [ -z "$new_port" ] || ! echo "$new_port" | grep -qE '^[1-9][0-9]{0,4}$' || [ "$new_port" -gt 65535 ]; then
- to_logger "[!] Error: You must provide a valid TCP port (1-65535) as a parameter"
- exit 1
- fi
- old_port=$(awk '/listen/ {++counter; if(counter==2) print NR}' "$config_file")
- sed -i "${old_port}s/[0-9]\+/$new_port/" "$config_file"
- /etc/init.d/nginx restart
- uci set firewall.allowui.dest_port="$new_port"
- uci commit firewall
- /etc/init.d/firewall restart
-
- to_logger "[+] The port has been changed to: $new_port"
- }
- set_router_ip() {
- new_ip="$1"
- if [ -z "$new_ip" ] || ! echo "$new_ip" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$'; then
- to_logger "[!] Error: You must provide a valid IP address as a parameter"
- exit 1
- fi
- gateway_ip="${new_ip%.*}.42"
- uci set network.lan.ipaddr="$gateway_ip"
- uci set network.lan.gateway="$new_ip"
- uci commit network
- to_logger "[+] The LAN IP address has been updated to: $new_ip"
- /etc/init.d/network restart
- }
- set_pineap_interface() {
- new_iface=$(echo $1 | sed 's/mon//')
- iface=$(uci get pineap.@config[0].pineap_interface | sed 's/mon//')
- if [[ "$new_iface" == "" ]]; then
- to_logger "[!] Error: You must select a new interface to assign to"
- exit 1
- fi
- to_logger "[+] Current interface : ${iface}"
- to_logger "[+] New interface : ${new_iface}"
- airmon-ng stop "${iface}mon" &>/dev/null
- airmon-ng stop "${new_iface}mon" &>/dev/null
- uci set pineap.@config[0].pineap_interface="${new_iface}mon"
- uci commit pineap
- /etc/init.d/pineapd restart
- }
- # based on airmon-ng code
- handle_lost_phys() {
- to_logger "[+] Looking for unrecognized wifi interfaces..."
- if [ -d /sys/class/ieee80211 ]; then
- for i in $(ls /sys/class/ieee80211/); do
- if [ ! -d /sys/class/ieee80211/${i}/device/net ]; then
- to_logger "[*] Found ${i} with no interface assigned!"
- find_free_interface ${i}
- fi
- done
- fi
- to_logger "[*] Check completed"
- }
- find_free_interface() {
- PHYDEV="${1}"
- target_mode="station"
- target_type="1"
- for i in $(seq 0 100); do
- if [ "$i" = "100" ]; then
- to_logger "[!] Unable to find a free name between wlan0 and wlan99"
- return 1
- fi
- if [ ! -e /sys/class/net/wlan${i} ] && [ ! -e /sys/class/net/wlan${i}mon ]; then
- to_logger "[*] Candidate wlan${i} and wlan${i}mon are both clear, creating wlan${i}"
- IW_ERROR="$(iw phy ${PHYDEV} interface add wlan${i} type ${target_mode} 2>&1)"
- if [ -z "${IW_ERROR}" ]; then
- if [ -d /sys/class/ieee80211/${PHYDEV}/device/net ]; then
- for j in $(ls /sys/class/ieee80211/${PHYDEV}/device/net/); do
- if [ "$(cat /sys/class/ieee80211/${PHYDEV}/device/net/${j}/type)" = "${target_type}" ]; then
- k=${j#wlan}
- i=${k%mon}
- fi
- done
- else
- to_logger "[!] Unable to create wlan${i} and no error received"
- return 1
- fi
- to_logger "[!] mac80211 ${target_mode} mode vif enabled on [${PHYDEV}]wlan${i}"
- unset IW_ERROR
- break
- else
- to_logger "[!] Error: Adding ${target_mode} mode interface: ${IW_ERROR}"
- break
- fi
- fi
- done
- }
- # handle commands
- if [[ $# -gt 0 ]]; then
- if echo "${COMMANDS}" | grep -wq "$1"; then
- $1 "$2"
- else
- to_logger "Unknown command: $1"
- echo "${HELP}"
- fi
- else
- echo "${HELP}"
- fi
|