Skip to content

Instantly share code, notes, and snippets.

@jfmherokiller
Last active July 20, 2023 14:41
Show Gist options
  • Save jfmherokiller/e5ac66a466b21cf31878a1a2d64f802f to your computer and use it in GitHub Desktop.
Save jfmherokiller/e5ac66a466b21cf31878a1a2d64f802f to your computer and use it in GitHub Desktop.
#!/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