Created
July 31, 2011 17:38
-
-
Save anonymous/1117004 to your computer and use it in GitHub Desktop.
Linux Ad-hoc shell script
This file contains 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/bash | |
##################################### | |
#Author: Leon Lee # | |
#email: [email protected] # | |
#QQ: 730395591 # | |
#Version: 1.0 # | |
#Note: If you have some good ideas # | |
# or advice, please mail me^^ # | |
##################################### | |
##################################### | |
ShareNet=eth0 | |
Wmode=ad-hoc | |
Wchannel=auto | |
Wessid=Leon_in_GuangZhou | |
WInterface=wlan0 | |
WPasskey=androidworkab | |
Wkey=restricted | |
Igateway=192.168.2.254 | |
Inetmask=255.255.255.0 | |
Inetwork=192.168.2.0 | |
DhcpRangeMin=192.168.2.10 | |
DhcpRangeMax=192.168.2.105 | |
##################################### | |
adhocFolder=/etc/adhoc | |
dnsmasqFile=$adhocFolder/dnsmasq.conf | |
resolvFile=/etc/resolv.conf | |
dnsmasqPid=/var/run/dnsmasq.pid | |
dnsmasqLeases=/var/run/dnsmasq.leases | |
# start Ad-hoc | |
function adhoc_start | |
{ | |
echo "Starting Ad-hoc..." | |
check_dnsmasq | |
sleep 1 | |
sudo ifconfig $WInterface down | |
echo -n "Setting $WInterface gateway and netmask." | |
sudo ifconfig $WInterface $Igateway netmask $Inetmask | |
sleep 1 | |
echo -n " [ good ]" | |
echo | |
echo -n "Setting up $WInterface ..." | |
sudo ifconfig $WInterface up | |
sleep 1 | |
echo -n " [ good ]" | |
echo | |
echo -n "Setting $WInterface mode..." | |
sudo iwconfig $WInterface mode $Wmode | |
sleep 1 | |
echo -n " [ good ]" | |
echo | |
echo -n "Setting $WInterface essid..." | |
sudo iwconfig $WInterface essid $Wessid | |
sleep 1 | |
echo -n " [ good ]" | |
echo | |
echo -n "Setting $WInterface cannel..." | |
sudo iwconfig $WInterface channel $Wchannel | |
sleep 1 | |
echo -n " [ good ]" | |
echo | |
echo -n "Setting $WInterface password..." | |
sudo iwconfig $WInterface key s:$WPasskey | |
sleep 1 | |
echo -n " [ good ]" | |
echo | |
echo -n "Setting $WInterface key type..." | |
sudo iwconfig $WInterface key $Wkey | |
sleep 1 | |
echo -n " [ good ]" | |
echo | |
echo | |
echo -n "Setting iptable..." | |
sleep 1 | |
#remove the old rules | |
sudo iptables -N wireless-adhoc | |
sudo iptables -F wireless-adhoc | |
sudo iptables -t nat -F PREROUTING | |
sudo iptables -t nat -F POSTROUTING | |
sudo iptables -t nat -F | |
#bring up the NAT rules | |
sudo iptables -A wireless-adhoc -m state --state ESTABLISHED,RELATED -j ACCEPT | |
sudo iptables -A wireless-adhoc -s $Inetwork/24 -j ACCEPT | |
sudo iptables -A wireless-adhoc -p 47 -j ACCEPT | |
sudo iptables -A wireless-adhoc -j DROP | |
sudo iptables -A FORWARD -m state --state INVALID -j DROP | |
sudo iptables -A FORWARD -j wireless-adhoc | |
sudo iptables -t nat -I POSTROUTING -s $Inetwork/24 -j MASQUERADE | |
sleep 1 | |
sudo sh -c "echo 1 > /proc/sys/net/ipv4/ip_forward" | |
echo -n "." | |
sleep 1 | |
sudo dnsmasq -i $WInterface --resolv-file=$resolvFile --conf-file=$dnsmasqFile | |
echo | |
echo "Success!^^" | |
} | |
# stop Ad-hoc | |
function adhoc_stop | |
{ | |
echo "Stopping adhoc ..." | |
sudo sh -c "echo 0 > /proc/sys/net/ipv4/ip_forward" | |
echo -n "." | |
# stop adhoc mode | |
sudo ifconfig $WInterface mode managed | |
sleep 1 | |
echo -n "." | |
sudo ifconfig $WInterface key off | |
sleep 1 | |
echo -n "." | |
sudo ifconfig $WInterface essid any | |
sleep 1 | |
echo -n "." | |
sudo ifconfig $WInterface down | |
sleep 1 | |
echo -n "." | |
# remove iptabled rules | |
sudo iptables -D FORWARD -j wireless-adhoc | |
sudo iptables -D FORWARD -m state --state INVALID -j DROP | |
sudo iptables -F wireless-adhoc | |
sudo iptables -X wireless-adhoc | |
sudo iptables -t nat -F PREROUTING | |
sudo iptables -t nat -F POSTROUTING | |
sudo iptables -t nat -F | |
sleep 1 | |
if [ -f $dnsmasqPid ]; then | |
dnsmasqID=`cat $dnsmasqPid` | |
kill $dnsmasqID | |
sleep 1 | |
fi | |
if [ -f $dnsmasqLeases ]; then | |
rm $dnsmasqLeases | |
fi | |
echo | |
echo "Wifi ad-hoc now stopped" | |
} | |
function adhoc_restart | |
{ | |
echo "Now, resart ad-hoc ..." | |
adhoc_stop | |
sleep 2 | |
adhoc_start | |
} | |
# check dnsmasq.conf | |
function check_dnsmasq | |
{ | |
if [ -f $dnsmasqPid ]; then | |
echo "Dhcp is running!" | |
echo "Now, restart Ad-hoc" | |
adhoc_stop | |
sleep 1 | |
fi | |
if [ ! -d $adhocFolder ]; then | |
mkdir $adhocFolder | |
fi | |
if [ ! -f $dnsmasqFile ]; then | |
echo "$dnsmasqFile is not exist, now building." | |
echo "dhcp-authoritative" > $dnsmasqFile | |
echo "dhcp-range=$DhcpRangeMin,$DhcpRangeMax,12h" >> $dnsmasqFile | |
echo "dhcp-leasefile=$dnsmasqLeases" >> $dnsmasqFile | |
echo "pid-file=$dnsmasqPid" >> $dnsmasqFile | |
echo "user=root" >> $dnsmasqFile | |
echo "no-negcache" >> $dnsmasqFile | |
fi | |
} | |
# is super user? | |
function super_user | |
{ | |
if [ "$UID" = "0" ]; then | |
return 0 | |
else | |
return 1 | |
fi | |
} | |
function usage | |
{ | |
echo "Wifi Ad-hoc control" | |
echo "$1 [-h][-s]" | |
echo "Default is start ad-hoc" | |
echo "-h show the usage" | |
echo "-s stop ad-hoc" | |
echo "-r restart ad-hoc" | |
} | |
if ! super_user ; then | |
echo "Need super user permission!" | |
exit 1 | |
fi | |
if [ $# -lt 1 ]; then | |
adhoc_start | |
elif [ "$1" = "-h" ]; then | |
usage | |
elif [ "$1" = "-s" ]; then | |
adhoc_stop | |
elif [ "$1" = "-r" ]; then | |
adhoc_restart | |
else | |
echo "Input error!" | |
echo "$1 -h gives usage information." | |
fi |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
in my laptop, it goes:
Setting wlp4s0 password...Error for wireless request "Set Encode" (8B2A) :
SET failed on device wlp4s0 ; Invalid argument.
how is this?