Last active
July 20, 2023 14:41
-
-
Save jfmherokiller/e5ac66a466b21cf31878a1a2d64f802f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
LISTS=$1 | |
[ -z $LISTS ] && LISTS=BASE16 | |
NZ=nzone | |
if grep -q Ubuntu /proc/version; then | |
VER=Ubuntu | |
PS="ps -A" | |
PACKAGES="hostapd dnsmasq sudo iptables procps cron net-tools wireless-tools pciutils module-init-tools coreutils grep sed" | |
[ $(dpkg -l $PACKAGES | grep -ce ^ii) -lt 13 ] && sudo apt-get update && sudo apt-get install $PACKAGES | |
SCRIPTROOT=/usr/local/bin | |
SCRIPT=$SCRIPTROOT/$NZ | |
APSCRIPT=$SCRIPTROOT/$NZ.ap | |
RCSCRIPT=/etc/rcS.d/S99$NZ.ap | |
EXTINT=$(route | grep default | sed -r "s/(.* +){7}(.*)/\2/") | |
WLINT=$(iwconfig 2>&1 | grep -v "no wireless" | cut -d " " -f 1 | grep -v $EXTINT | sed /^$/d) | |
WLCOUNT=$(echo -n $WLINT | wc -c) | |
[ $WLCOUNT -eq 0 ] && echo No wireless interfaces found && exit | |
WLCOUNT=$(echo "$WLINT" | wc -l) | |
if [ $WLCOUNT -gt 1 ]; then | |
for i in $(seq 1 $WLCOUNT); do | |
printf "%d - %s\n" $i $(echo "$WLINT" | head -n $i | tail -n 1) | |
done | |
read -p "Select the number of the wireless interface to use: " WLIDX | |
[ $WLIDX -lt 1 ] || [ $WLIDX -gt $WLCOUNT ] && echo Invalid wireless interface number && exit | |
WLINT=$(echo "$WLINT" | head -n $WLIDX | tail -n 1) | |
fi | |
WLMOD=$(lspci -k | grep -A 3 -i "wireless" | grep "Kernel driver" | sed -r "s/.*?: (.*)/\1/" | tail -n 1) | |
[ $(modinfo $WLMOD | grep depend | grep -c mac80211) = 0 ] && echo "$WLMOD WiFi adapter not supported" && exit | |
HOSTAPDCONF=/etc/${WLINT}_hostap.conf | |
HOSTAPDPID=/var/run/${WLINT}_hostapd.pid | |
DNSMASQPID=/var/run/${WLINT}_dnsmasq.pid | |
fi | |
if true; then | |
VER=DD-WRT | |
PS=ps | |
SCRIPTROOT=/tmp | |
SCRIPT=$SCRIPTROOT/$NZ | |
SESSCRIPTROOT=/tmp/etc/config | |
SESSCRIPT=$SESSCRIPTROOT/$NZ.sesbutton | |
WLINT=$(nvram get wl0_ifname) | |
HOSTAPDCONF=/tmp/${WLINT}_hostap.conf | |
HOSTAPDPID=/var/run/${WLINT}_hostapd.pid | |
fi | |
if [ -f /.version ]; then | |
VER=WL500G | |
PS=ps | |
SCRIPTROOT=/usr/local/sbin | |
SCRIPT=$SCRIPTROOT/$NZ | |
POSTBOOT=$SCRIPTROOT/post-boot | |
WLINT=$(nvram get wl0_ifname) | |
fi | |
[ -z $VER ] && echo System not supported && exit | |
echo "#!/bin/sh" > $SCRIPT | |
echo "URL=http://duke-srg.dyndns.org/3ds/nzone?" >> $SCRIPT | |
echo "MACS=/tmp/$NZ.macs" >> $SCRIPT | |
echo "SPDELAY=480" >> $SCRIPT | |
echo "MACNUM=0" >> $SCRIPT | |
echo "[ -f \$MACS ] && MACNUM=\$(grep -v x \$MACS | wc -l) && DELAY=\$(((\$(date +%s)-\$(date -r \$MACS +%s))/60))" >> $SCRIPT | |
echo "[ \$MACNUM = 0 ] && NEWMACS=\$(wget -q -O - \$URL\$1)" >> $SCRIPT | |
echo "[ \$(echo -n \"\$NEWMACS\" | wc -c) != 0 ] && echo \"\$NEWMACS\" > \$MACS && MACNUM=\$(cat \$MACS | wc -l)" >> $SCRIPT | |
echo "[ -z \$DELAY ] && DELAY=\$SPDELAY" >> $SCRIPT | |
echo "[ \$MACNUM = 0 ] && sed -ri \"s/x(.*)/\\\1/\" \$MACS && MACNUM=\$(grep -v x \$MACS | wc -l)" >> $SCRIPT | |
echo "MACTOTAL=\$(cat \$MACS | wc -l)" >> $SCRIPT | |
echo "[ \$MACNUM = 0 ] || ([ \$MACTOTAL -lt \$SPDELAY ] && [ \$DELAY -lt \$((\$SPDELAY/\$MACTOTAL)) ]) && exit" >> $SCRIPT | |
echo "RANDOM=\$(head /dev/urandom | hexdump -d | head -n 1 | cut -c 11-15 | sed -r \"s/0*(.*)/\\\1/\")" >> $SCRIPT | |
echo "MAC=\$(grep -v x \$MACS | head -n \$((\$RANDOM%\${MACNUM}+1)) | tail -n 1 | cut -d , -f 1)" >> $SCRIPT | |
echo "sed -ri s/\$MAC/x\$MAC/ \$MACS" >> $SCRIPT | |
echo "ifconfig $WLINT down" >> $SCRIPT | |
[ $VER = Ubuntu ] && echo "rfkill unblock wifi" >> $SCRIPT | |
[ $VER = Ubuntu ] || [ ! -f /usr/sbin/hostapd ] && echo -e "ifconfig $WLINT hw ether \$MAC\nifconfig $WLINT up" >> $SCRIPT | |
[ -f /usr/sbin/hostapd ] && echo "sed -ri s/bssid=.*/bssid=\$MAC/ $HOSTAPDCONF" >> $SCRIPT | |
[ $VER = Ubuntu ] || [ -f /usr/sbin/hostapd ] && echo "while ! hostapd -B -P $HOSTAPDPID $HOSTAPDCONF; do" >> $SCRIPT && echo " PID=\$($PS | grep $HOSTAPDPID | grep -v grep | sed 's/^ *//' | cut -d ' ' -f 1)" >> $SCRIPT && echo " [ ! -z \$PID ] && kill \$PID" >> $SCRIPT && echo " sleep 1" >> $SCRIPT && echo "done" >> $SCRIPT | |
[ $VER = DD-WRT ] && echo "stopservice cron" >> $SCRIPT && echo "startservice cron" >> $SCRIPT | |
chmod +x $SCRIPT | |
if [ $VER = DD-WRT ]; then | |
mkdir -p $SESSCRIPTROOT | |
echo "#!/bin/sh" > $SESSCRIPT | |
echo "CRONJOBS=\$(nvram get cron_jobs)" >> $SESSCRIPT | |
echo "if echo \"\$CRONJOBS\" | grep -q $NZ; then" >> $SESSCRIPT | |
echo " if echo \"\$CRONJOBS\" | grep $NZ | grep -qe '^#'; then" >> $SESSCRIPT | |
echo " nvram set cron_jobs=\"\$(echo \"\$CRONJOBS\" | sed -r \"s/^#+(.*?$NZ.*?)\$/\\\1/\")\"" >> $SESSCRIPT | |
echo " else" >> $SESSCRIPT | |
echo " nvram set cron_jobs=\"\$(echo \"\$CRONJOBS\" | sed -r s/^[^#+].*?$NZ.*?\$/#\&/)\"" >> $SESSCRIPT | |
echo " fi" >> $SESSCRIPT | |
echo " stopservice cron" >> $SESSCRIPT | |
echo " startservice cron" >> $SESSCRIPT | |
echo "fi" >> $SESSCRIPT | |
chmod +x $SESSCRIPT | |
CMD=$(cat $SCRIPT | sed s/\\\\/\\\\\\\\/g | sed s/\"/\\\\\"/g | sed s/\\$/\\\\$/g | sed s/$/\\\\n/ | tr -d "\n") | |
SESCMD=$(cat $SESSCRIPT | sed s/\\\\/\\\\\\\\/g | sed s/\"/\\\\\"/g | sed s/\\$/\\\\$/g | sed s/$/\\\\n/ | tr -d "\n") | |
nvram set rc_startup="echo -e \"$CMD\" > $SCRIPT; chmod +x $SCRIPT; mkdir -p $SESSCRIPTROOT; echo -e \"$SESCMD\" > $SESSCRIPT; chmod +x $SESSCRIPT" | |
nvram set cron_jobs="* * * * * root $SCRIPT $LISTS" | |
nvram commit | |
stopservice cron | |
startservice cron | |
fi | |
if [ $VER = WL500G ]; then | |
[ ! -f $POSTBOOT ] && echo "#!/bin/sh" > $POSTBOOT && chmod +x $POSTBOOT | |
sed -ri /crond/d $POSTBOOT | |
echo crond >> $POSTBOOT | |
echo -e "$(crontab -l | sed /$NZ/d)\n* * * * * $SCRIPT $LISTS" | crontab - | |
sed -ri /crontabs/d /usr/local/.files | |
echo /etc/crontabs >> /usr/local/.files | |
flashfs enable | |
flashfs save | |
flashfs commit | |
[ -z $(pidof crond) ] && crond | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment