Po przeczytaniu tego: http://gdl.hopto.org/~gdr/gdrwpl/macspoof.php doszedłem do wniosku że muszę coś takiego napisać "pod siebie"
2 główne różnice: napisałem to w bashu a nie c++ i po drugie, zamiast zwykłego pingu posłużyłem się arpingiem co pozwala zignorować fakt używania firewalli.
O co chodzi?? Skrypt zmienia cyklicznie IP naszego komputera na IP pozostałych kompów w LANie, oczywiście tylko tych akurat niewłączonych. Chciałem na początku by skrypt pingował bezpośrednio adresy MAC ale ponieważ nie udało mi się tego na razie rozwiązać, konieczne jest podawanie na początku skryptu (oprócz MACa i hostname) także IP komputera. Jest to o tyle uciążliwe że np. po restarcie routera IP się zmieniają i potrzebne jest odpowiednie pozmienianie wpisoół IP. Poza tym: miodzio
Oprócz podania tych 3 parametrów dla każdego kompa, wpisujemy też w zmiennych ile tych kompów w LANie jest (oprócz naszego) no i czas co jaki (w pewnym niewielkim przybliżeniu) ma następować zmiana IP. Potem... jazda!!
Skrypt arpinguje poszczegolne hosty z listy i jak znajdzie martwego to zmienia IP. MAC i hostname na jego. I tak co zadany czas. Dobrze by ten czas nie był przesadnie długi bo inaczej zabierzemy neta jakiemuś gościowi, który jeszcze przed momentem miał komp wyłączony. A co jeśli włączyliśmy program kiedy np. wszystkie hosty były dead a teraz wszystkie są włączone?? Nic się nie stanie
Skrypt wykryje sytuację gdy w sieci są mniej niż 2 "wolne" IP i powiadomi nas o tym alarmem, od razu automatycznie przywracając nasze oryginalne ustawienia. Oczywiście jeśli zostaną tylko 2 wolne IP to zmiana naszego IP następuje tylko w obębie tych dwóch. Program działa w nieskończoność, można go zawsze zakończyć wciskająć Enter.
A po co w ogóle taki skrypt?? Oczywiście ze względów anonimowości (nasze ew. wybryki obciążają pozostałych userów) ale nie tylko. Wyobraźmy sobie np. sieć, w której mamy statycznie przydzielone IP ("po MACach"). Mamy przydzielone tylko jedno IP, ale mamy 2 kompy i na obu chcielibyśmy mieć neta. Płacimy drugi abonament?? Niekoniecznie 8) Podłączamy je przez huba. Jeden komp będzie chodził na swoim poprawnym IP a drugi będzie korzystał z IP wyłączonych hostów. Jeśli sieć jest odpowiednio duża i odpowiednio dużo hostów zazwyczaj jest wylączonych ten numer przejdzie nawet z trzecim czy czwartym komputerem
Chciałem zrobić takie coś pod Windę, ale nie umiałem wyłączyć całkowicie interfejsu sieciowego. Zapraszam do komentarzy, jeśli dowiem się co z tym pingowaniem adresów MAC to przerobię odpowiednio skrypt
PS Mam nadzieję że nie zostanę przeklęty za tak długi post.
#!/bin/sh
#
# Zmienia IP cyklicznie na IP wylaczonych hostow
# Do prawidlowego dzialania wymaga arping (ktory z kolei potrzebuje libnet)
# Jesli nie ma przynajmniej dwoch wolnych MACow, program zakonczy dzialanie
# przywracajac oryginalne ustawienia IP, MACa i nazwy komputera.
#
# by Barca
#
# Zdefiniowanie zmiennych
CZAS=10 # czas miedzy zmianami IP (w sekundach)
LICZBA_HOSTOW=5 # liczba wszystkich komputerow w sieci z wyj. tego.
# Minimum to 2, poniewaz w innym przypadku nie ma sensu
# stosowac tego skryptu.
MOJE_IP=XXX.XXX.XXX.XXX # moje prawdziwe IP
MOJ_MAC=XX:XX:XX:XX:XX:XX # moj prawdziwy MAC
MOJA_NAZWA=XXXXXXXXXX # moja prawdziwa nazwa komputera
SASIAD_IP=XXX.XXX.XXX.XXX
SASIAD_MAC=XX:XX:XX:XX:XX:XX
SASIAD_NAZWA=XXXXXXXXXX
ZENEK_IP=XXX.XXX.XXX.XXX
ZENEK_MAC=XX:XX:XX:XX:XX:XX
ZENEK_NAZWA=XXXXXXXXXX
CHAKER_IP=XXX.XXX.XXX.XXX
CHAKER_MAC=XX:XX:XX:XX:XX:XX
CHAKER_NAZWA=XXXXXXXXXX
ADMIN_IP=XXX.XXX.XXX.XXX
ADMIN_MAC=XX:XX:XX:XX:XX:XX
ADMIN_NAZWA=XXXXXXXXXX
ULTRA_IP=XXX.XXX.XXX.XXX
ULTRA_MAC=XX:XX:XX:XX:XX:XX
ULTRA_NAZWA=XXXXXXXXXX
# Funkcje
function aktualne_dane
{
MOJE_AKTUALNE_IP=`/sbin/ifconfig | grep 'inet addr' | grep Bcast | awk '{print $2}' | awk -F: '{print $2}'`
MOJ_AKTUALNY_MAC=`/sbin/ifconfig | grep HWaddr | awk '{print $5; }'`
MOJA_AKTUALNA_NAZWA=`hostname`
clear
echo Twoje aktualne dane:
echo
echo -e "E[32m$MOJE_AKTUALNE_IP033[0m"
echo -e "E[32m$MOJ_AKTUALNY_MAC033[0m"
echo -e "E[32m$MOJA_AKTUALNA_NAZWA033[0m"
echo
}
function sprawdzenie_ip
{
echo $IP
if arping -c 1 -r $IP
then
ZAJETE_IP=`expr $ZAJETE_IP + 1`
nmblookup -A "$IP" | grep "<00>" | cut -f2 | awk -F" " '{print $1}' | head -n 1
echo -e "E[31mHost wlaczony033[0m"
else
echo $MAC
echo -e "E[32mHost wylaczony - przystepuje do zmiany IP033[0m"
ifconfig eth0 down
killall inetd
killall dhcpcd
ifconfig eth0 hw ether $MAC
hostname $NAZWA
ifconfig eth0 up
sh /etc/rc.d/rc.inet1
sh /etc/rc.d/rc.inet2
aktualne_dane
echo -ne "E[36mWcisnij Enter jesli chcesz zakonczyc dzialanie programu033[0m"
if read -t $CZAS response
then
koniec
else
echo
echo
echo -e "E[36mWyszukuje wolne IP...033[0m"
echo
fi
fi
}
function koniec
{
echo $MOJE_IP
ifconfig eth0 down
killall inetd
killall dhcpcd
ifconfig eth0 hw ether $MOJ_MAC
hostname $MOJA_NAZWA
ifconfig eth0 up
sh /etc/rc.d/rc.inet1
sh /etc/rc.d/rc.inet2
aktualne_dane
echo -e "E[36mNastapil powrot do prawidlowego IP, MACa i nazwy komputera033[0m"
echo
exit
}
function alarm
{
echo $MOJE_IP
ifconfig eth0 down
killall inetd
killall dhcpcd
ifconfig eth0 hw ether $MOJ_MAC
hostname $MOJA_NAZWA
ifconfig eth0 up
sh /etc/rc.d/rc.inet1
sh /etc/rc.d/rc.inet2
aktualne_dane
echo -n -----------------------
echo -ne "E[31m ALARM! 033[0m"
echo -----------------------
echo Uwaga! Wykryto mniej niż dwa wolne adresy MAC w sieci,
echo co oznacza, ze zmienianie IP jest niemozliwe. Przywro-
echo cone zostaly normalne ustawienia IP, MACa i nazwy kom-
echo putera. Musisz poczekac do czasu, gdy mniej komputerow
echo bedzie wlaczonych.
echo ------------------------------------------------------
while
X=0
do
guile -c '(write-char #bel)'
if
read -t 1 response
then
exit
fi
done
}
# Wlasciwy program
aktualne_dane
echo -e "E[36mWyszukuje wolne IP...033[0m"
echo
LICZBA_HOSTOW=`expr $LICZBA_HOSTOW - 1`
while X=0
do
IP=$SASIAD_IP && MAC=$SASIAD_MAC && NAZWA=$SASIAD_NAZWA
sprawdzenie_ip
IP=$ZENEK_IP && MAC=$ZENEK_MAC && NAZWA=$ZENEK_NAZWA
sprawdzenie_ip
IP=$CHAKER_IP && MAC=$CHAKER_MAC && NAZWA=$CHAKER_NAZWA
sprawdzenie_ip
IP=$ADMIN_IP && MAC=$ADMIN_MAC && NAZWA=$ADMIN_NAZWA
sprawdzenie_ip
IP=$ULTRA_IP && MAC=$ULTRA_MAC && NAZWA=$ULTRA_NAZWA
sprawdzenie_ip
if
[ $ZAJETE_IP -ge $LICZBA_HOSTOW ]
then
alarm
else
ZAJETE_IP=0
fi
done
O co chodzi?? Skrypt zmienia cyklicznie IP naszego komputera na IP pozostałych kompów w LANie, oczywiście tylko tych akurat niewłączonych. Chciałem na początku by skrypt pingował bezpośrednio adresy MAC ale ponieważ nie udało mi się tego na razie rozwiązać, konieczne jest podawanie na początku skryptu (oprócz MACa i hostname) także IP komputera. Jest to o tyle uciążliwe że np. po restarcie routera IP się zmieniają i potrzebne jest odpowiednie pozmienianie wpisoół IP. Poza tym: miodzio
Skrypt arpinguje poszczegolne hosty z listy i jak znajdzie martwego to zmienia IP. MAC i hostname na jego. I tak co zadany czas. Dobrze by ten czas nie był przesadnie długi bo inaczej zabierzemy neta jakiemuś gościowi, który jeszcze przed momentem miał komp wyłączony. A co jeśli włączyliśmy program kiedy np. wszystkie hosty były dead a teraz wszystkie są włączone?? Nic się nie stanie
A po co w ogóle taki skrypt?? Oczywiście ze względów anonimowości (nasze ew. wybryki obciążają pozostałych userów) ale nie tylko. Wyobraźmy sobie np. sieć, w której mamy statycznie przydzielone IP ("po MACach"). Mamy przydzielone tylko jedno IP, ale mamy 2 kompy i na obu chcielibyśmy mieć neta. Płacimy drugi abonament?? Niekoniecznie 8) Podłączamy je przez huba. Jeden komp będzie chodził na swoim poprawnym IP a drugi będzie korzystał z IP wyłączonych hostów. Jeśli sieć jest odpowiednio duża i odpowiednio dużo hostów zazwyczaj jest wylączonych ten numer przejdzie nawet z trzecim czy czwartym komputerem
Chciałem zrobić takie coś pod Windę, ale nie umiałem wyłączyć całkowicie interfejsu sieciowego. Zapraszam do komentarzy, jeśli dowiem się co z tym pingowaniem adresów MAC to przerobię odpowiednio skrypt
PS Mam nadzieję że nie zostanę przeklęty za tak długi post.
#!/bin/sh
#
# Zmienia IP cyklicznie na IP wylaczonych hostow
# Do prawidlowego dzialania wymaga arping (ktory z kolei potrzebuje libnet)
# Jesli nie ma przynajmniej dwoch wolnych MACow, program zakonczy dzialanie
# przywracajac oryginalne ustawienia IP, MACa i nazwy komputera.
#
# by Barca
#
# Zdefiniowanie zmiennych
CZAS=10 # czas miedzy zmianami IP (w sekundach)
LICZBA_HOSTOW=5 # liczba wszystkich komputerow w sieci z wyj. tego.
# Minimum to 2, poniewaz w innym przypadku nie ma sensu
# stosowac tego skryptu.
MOJE_IP=XXX.XXX.XXX.XXX # moje prawdziwe IP
MOJ_MAC=XX:XX:XX:XX:XX:XX # moj prawdziwy MAC
MOJA_NAZWA=XXXXXXXXXX # moja prawdziwa nazwa komputera
SASIAD_IP=XXX.XXX.XXX.XXX
SASIAD_MAC=XX:XX:XX:XX:XX:XX
SASIAD_NAZWA=XXXXXXXXXX
ZENEK_IP=XXX.XXX.XXX.XXX
ZENEK_MAC=XX:XX:XX:XX:XX:XX
ZENEK_NAZWA=XXXXXXXXXX
CHAKER_IP=XXX.XXX.XXX.XXX
CHAKER_MAC=XX:XX:XX:XX:XX:XX
CHAKER_NAZWA=XXXXXXXXXX
ADMIN_IP=XXX.XXX.XXX.XXX
ADMIN_MAC=XX:XX:XX:XX:XX:XX
ADMIN_NAZWA=XXXXXXXXXX
ULTRA_IP=XXX.XXX.XXX.XXX
ULTRA_MAC=XX:XX:XX:XX:XX:XX
ULTRA_NAZWA=XXXXXXXXXX
# Funkcje
function aktualne_dane
{
MOJE_AKTUALNE_IP=`/sbin/ifconfig | grep 'inet addr' | grep Bcast | awk '{print $2}' | awk -F: '{print $2}'`
MOJ_AKTUALNY_MAC=`/sbin/ifconfig | grep HWaddr | awk '{print $5; }'`
MOJA_AKTUALNA_NAZWA=`hostname`
clear
echo Twoje aktualne dane:
echo
echo -e "E[32m$MOJE_AKTUALNE_IP033[0m"
echo -e "E[32m$MOJ_AKTUALNY_MAC033[0m"
echo -e "E[32m$MOJA_AKTUALNA_NAZWA033[0m"
echo
}
function sprawdzenie_ip
{
echo $IP
if arping -c 1 -r $IP
then
ZAJETE_IP=`expr $ZAJETE_IP + 1`
nmblookup -A "$IP" | grep "<00>" | cut -f2 | awk -F" " '{print $1}' | head -n 1
echo -e "E[31mHost wlaczony033[0m"
else
echo $MAC
echo -e "E[32mHost wylaczony - przystepuje do zmiany IP033[0m"
ifconfig eth0 down
killall inetd
killall dhcpcd
ifconfig eth0 hw ether $MAC
hostname $NAZWA
ifconfig eth0 up
sh /etc/rc.d/rc.inet1
sh /etc/rc.d/rc.inet2
aktualne_dane
echo -ne "E[36mWcisnij Enter jesli chcesz zakonczyc dzialanie programu033[0m"
if read -t $CZAS response
then
koniec
else
echo
echo
echo -e "E[36mWyszukuje wolne IP...033[0m"
echo
fi
fi
}
function koniec
{
echo $MOJE_IP
ifconfig eth0 down
killall inetd
killall dhcpcd
ifconfig eth0 hw ether $MOJ_MAC
hostname $MOJA_NAZWA
ifconfig eth0 up
sh /etc/rc.d/rc.inet1
sh /etc/rc.d/rc.inet2
aktualne_dane
echo -e "E[36mNastapil powrot do prawidlowego IP, MACa i nazwy komputera033[0m"
echo
exit
}
function alarm
{
echo $MOJE_IP
ifconfig eth0 down
killall inetd
killall dhcpcd
ifconfig eth0 hw ether $MOJ_MAC
hostname $MOJA_NAZWA
ifconfig eth0 up
sh /etc/rc.d/rc.inet1
sh /etc/rc.d/rc.inet2
aktualne_dane
echo -n -----------------------
echo -ne "E[31m ALARM! 033[0m"
echo -----------------------
echo Uwaga! Wykryto mniej niż dwa wolne adresy MAC w sieci,
echo co oznacza, ze zmienianie IP jest niemozliwe. Przywro-
echo cone zostaly normalne ustawienia IP, MACa i nazwy kom-
echo putera. Musisz poczekac do czasu, gdy mniej komputerow
echo bedzie wlaczonych.
echo ------------------------------------------------------
while
X=0
do
guile -c '(write-char #bel)'
if
read -t 1 response
then
exit
fi
done
}
# Wlasciwy program
aktualne_dane
echo -e "E[36mWyszukuje wolne IP...033[0m"
echo
LICZBA_HOSTOW=`expr $LICZBA_HOSTOW - 1`
while X=0
do
IP=$SASIAD_IP && MAC=$SASIAD_MAC && NAZWA=$SASIAD_NAZWA
sprawdzenie_ip
IP=$ZENEK_IP && MAC=$ZENEK_MAC && NAZWA=$ZENEK_NAZWA
sprawdzenie_ip
IP=$CHAKER_IP && MAC=$CHAKER_MAC && NAZWA=$CHAKER_NAZWA
sprawdzenie_ip
IP=$ADMIN_IP && MAC=$ADMIN_MAC && NAZWA=$ADMIN_NAZWA
sprawdzenie_ip
IP=$ULTRA_IP && MAC=$ULTRA_MAC && NAZWA=$ULTRA_NAZWA
sprawdzenie_ip
if
[ $ZAJETE_IP -ge $LICZBA_HOSTOW ]
then
alarm
else
ZAJETE_IP=0
fi
done