Prosíme přihlašte se nebo zaregistrujte.

Přihlašte se svým uživatelským jménem a heslem.
Vaše pomoc je stále potřeba!

Autor Téma: Skript  (Přečteno 3154 krát)

mycz

  • Aktivní člen
  • *
  • Příspěvků: 208
  • Lysergic acid diethylamide
Skript
« kdy: 18 Května 2008, 23:14:18 »
Zdravim, prosim o pomoc... Potreboval bych poradit se skriptem, ktery by z jednoho textaku, ktery bude obsahovat ip adresu zjistil jeho mac adresu. Aby se na tu ip adresu provedl arping a zjistena mac by se zapsala do firewallu jako povolena. Muzete pls poradit jak by asi vypadal takovy skript v bashi?
« Poslední změna: 19 Května 2008, 12:35:17 od Anna Taliánová »
Píchali bychom si i vitamín C, kdyby to bylo ilegalní!

existpierre

  • Host
Re: Skript
« Odpověď #1 kdy: 18 Května 2008, 23:40:34 »
no zislo by sa aj vidiet, aky je to textak, pre lepsiu predstavu. Da sa to cez regularne vyrazy, ale tie este dobre neviem, tak si radsej pockaj na ntz :D
« Poslední změna: 19 Května 2008, 12:36:02 od Anna Taliánová »

mycz

  • Aktivní člen
  • *
  • Příspěvků: 208
  • Lysergic acid diethylamide
Re: Skript
« Odpověď #2 kdy: 19 Května 2008, 11:47:12 »
Mel by to byt obycejny textak kde bude jenom ip adresa
Píchali bychom si i vitamín C, kdyby to bylo ilegalní!

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Skript
« Odpověď #3 kdy: 19 Května 2008, 11:52:48 »
a mas nejakou konkretni predstavu o tom iptables prikazu povolujici tu mac adresu?

mycz

  • Aktivní člen
  • *
  • Příspěvků: 208
  • Lysergic acid diethylamide
Re: Skript
« Odpověď #4 kdy: 19 Května 2008, 12:04:59 »
asi nejak takto:
Kód: [Vybrat]
iptables -N povolene_mac
iptables -A FORWARD -j povolene_mac
iptables -A povolene_mac -m mac --mac-source xx:xx:xx:xx:xx:xx -j ACCEPT
Píchali bychom si i vitamín C, kdyby to bylo ilegalní!

nettezzaumana

  • Host
Re: Skript
« Odpověď #5 kdy: 19 Května 2008, 12:46:48 »
Kód: [Vybrat]
#!/bin/bash
# this script helps with printing some values of your network setting
# and is designed for use in scripts.
# this script is based on linux program ifconfig.
# tested on debian, ubuntu and suse distributions..
# by root@proximasociale.cz aka nettezzaumana

# test if "ifconfig command is accessible by current user"
if [ -x "/sbin/ifconfig" ]; then
IFCFG="/sbin/ifconfig"; else
IFCFG=$(which ifconfig)
if [ ! -x "$IFCFG" ] || [ -z "$IFCFG" ]; then
echo "looks like you have no permissions to run ifconfig command or is not in your path"
exit 1
fi
fi

# help message
HLPMSG() {
echo "run this script with at least one parameter as alias of existing network interface"
echo "you could also specify in second parametr, what would you see in following format:"
echo "~$ ipshow.sh eth0 <keyword>"
echo "<keywords> separated by colons are:"
echo " mac | m -- for mac address"
echo " ip | i -- for ip address"
echo " bcast | b -- for bradcast"
echo "if specified only interface, output will be in order 'ip mac bcast'"
}

# test if is user input empty or not
if [ -z "$1" ]; then
HLPMSG
exit 1
fi

# test if user input is request for help message
case $1 in
-h | -? | --help )
HLPMSG
exit 0
;;
# test if all other case of user's input are usable with program
# if not, just print list of acceptable options and exit..
* )
if [ ! $($IFCFG | grep '^\w' | awk '{print $1}' | grep -x $1) ]; then
echo "can't find this interface, your interfaces are:"
$IFCFG | grep '^\w' | awk '{print $1}'
exit 1
fi
;;
esac

# test for second parameter, first if exists
if [ ! -z "$2" ]; then
# determine number of fields and print error message if detects something incorrect
NF=$(echo $2 | awk -F: '{print NF}')
if [ "$NF" -gt "3" ]; then
echo "too much requests.."
exit 1
fi
# cykle which makes right order of suggested output
# at first make cycle with equal rounds as number of fields in each round.
# in every round works with just one field of input, separated with ":" sign..
for ((x=1;x<$NF+1;x++)) {
# what to do in each round
current=$(echo $2 | cut -d: -f$x)
case $current in
ip | i )
myip=$($IFCFG "$1" | grep '\([0-9]\{1,3\}\.\)\{3\}' | awk '{print $2}' | awk -F: '{print $2}')
order="$order $myip";;
mac | m )
myhwadr=$($IFCFG | grep "$1 " | awk '{print $5}')
order="$order $myhwadr";;
bcast | b)
mybrd=$($IFCFG "$1" | grep '\([0-9]\{1,3\}\.\)\{3\}' | awk '{print $3}' | awk -F: '{print $2}')
order="$order $mybrd";;
# test if correct at all..
* )
HLPMSG
exit 1;;
esac
}
# default behave if no paremeter obtained
else
myip=$($IFCFG "$1" | grep '\([0-9]\{1,3\}\.\)\{3\}' | awk '{print $2}' | awk -F: '{print $2}')
myhwadr=$($IFCFG | grep "$1 " | awk '{print $5}')
mybrd=$($IFCFG "$1" | grep '\([0-9]\{1,3\}\.\)\{3\}' | awk '{print $3}' | awk -F: '{print $2}')
order="$myip $myhwadr $mybrd"
fi

# last adction. only this makes output
echo $order

exit 0
pred dlouhou dobou (kdyz jsem jeste neumel poradne regularni vyrazy, proto ten awk) jsem napsal tento skript. snad ti k necemu bude ..

Tvuj prikaz by pak vypadal takto ::
iptables -A povolene_mac -m mac --mac-source $(ipshow.sh eth0 m) -j ACCEPT

ps. priklad ::
./ipshow.sh eth0 m:i // vypise mac adresu a ip adresu pro eth0
./ipshow.sh eth0 i:m // udela to v obracenem poradi
./ipshow.sh eth0 ip // vypise pouze ip adresu daneho iface
./ipshow.sh eth0 mac // vypise pouze mac adresu daneho iface
« Poslední změna: 19 Května 2008, 12:55:02 od nettezzaumana »

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Skript
« Odpověď #6 kdy: 19 Května 2008, 12:51:32 »
nejsem na linuxovym stroji, takze to nemuzu vyzkouset, ale zkus toto:

Kód: [Vybrat]
#!/bin/bash

FILE="SOUBOR_S_IP"
INTERFACE="eth0"


IP=`cat $FILE`

echo "hledam MAC adresu prislusici k IP $IP"

MAC=`arping -c 1 -I $INTERFACE $IP | egrep -o '\[.*\]' | tr -d []`

if [ "$PIPESTATUS" = "0" ]; then
  echo "MAC: $MAC"
  # sem si nasazej ty svoje prikazy pro iptables
  # na misto, kam se ma dosadit nalezena MAC adresa, vloz $MAC

else
  echo "MAC se nepodarilo nalezt"
fi


musis v nem nastavit hodnoty pro promenne FILE (napis cestu k tomu souboru s IP) a INTERFACE (interface pro pristup k siti, pravdepodobne eth0)

myslim, ze arping je treba spustit jako root, takze musis skript poustet pres sudo. Kdyz to bude fungovat, tak si tam pak dopis ty svoje prikazy pro iptables, takhle to zatim jen vypise tu mac adresu, co to najde. Mozna nekde bude chybka, pisu to temer z hlavy.

« Poslední změna: 19 Května 2008, 23:20:07 od kkaarreell »

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Skript
« Odpověď #7 kdy: 19 Května 2008, 12:51:55 »
pozde :-D

honorguard

  • Host
Re: Skript
« Odpověď #8 kdy: 19 Května 2008, 12:52:35 »
Nemělo by tohle být spíš v  proramování pro GNU/Linux?

mycz

  • Aktivní člen
  • *
  • Příspěvků: 208
  • Lysergic acid diethylamide
Re: Skript
« Odpověď #9 kdy: 19 Května 2008, 13:07:27 »
nejsem na linuxovym stroji, takze to nemuzu vyzkouset, ale zkus toto:

Kód: [Vybrat]
#!/bin/bash

FILE="SOUBOR_S_IP"
INTERFACE="eth0"


IP=`cat $FILE`

echo "hledam MAC adresu prislusici k IP $IP"

MAC=`arping -c 1 -I $INTERFACE $IP | egrep -o '\[.*\]' | tr -d []`

if [ "$PIPESTATUS" = "0" ]; then
  echo "MAC: $MAC"
  # sem si nasazej ty svoje prikazy pro iptables
  # na misto, kam se ma dosadit nalezena MAC adresa, vloz $MAC

else
  echo "MAC se nepodarilo nalezt
fi


musis v nem nastavit hodnoty pro promenne FILE (napis cestu k tomu souboru s IP) a INTERFACE (interface pro pristup k siti, pravdepodobne eth0)

myslim, ze arping je treba spustit jako root, takze musis skript poustet pres sudo. Kdyz to bude fungovat, tak si tam pak dopis ty svoje prikazy pro iptables, takhle to zatim jen vypise tu mac adresu, co to najde. Mozna nekde bude chybka, pisu to temer z hlavy.



Tohle se mi libi :)
V pripade, ze by tech souboru s ip adresou bylo vice (treba IP_1; IP_2; IP_3...) a pokazde, kdyby se novy objevil, jak zajistit aby se ten skript spustil?
Píchali bychom si i vitamín C, kdyby to bylo ilegalní!

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Skript
« Odpověď #10 kdy: 19 Května 2008, 14:43:05 »
Bud to budes poustet rucne a nebo periodicky (cronem) treba kazdych X minut.

Nejdriv ten skript uprav tak (on fakt bezi? :-) ), aby se ten soubor s IP zadaval jako parametr pri spousteni prikazu, tj. $FILE  nahradit "$1".

Jde to (snad) udelat tak, ze se findem vyhledaji vsechny soubory IPxxx... mladsi (vytvorene ci zmenene) nez X minut a nad nimi se ten skript spusti. Prikaz bys pak poustel cronem prave kazdych X minut (v nasledujicim prikazu nahrad X tou konkretni hodnotou).

Kód: [Vybrat]
find ADRESAR_S_IP_SOUBORY -name 'IP*[!~]' -mtime -X -exec echo "zpracovavam soubor {}" \; -exec TEN_PREDCHOZI_SKRIPT {} \;

Ale za spravnost nerucim, treba dobre vyzkouset

mycz

  • Aktivní člen
  • *
  • Příspěvků: 208
  • Lysergic acid diethylamide
Re: Skript
« Odpověď #11 kdy: 19 Května 2008, 15:27:11 »
Jestli bezi jsem jeste nezkousel, protoze jsem se jeste nemel jak dostat k tomu routru na kterem to pobezi, ale doufam ze do bude behat... Dekuju vsem moc za rady.
Píchali bychom si i vitamín C, kdyby to bylo ilegalní!

pousteVnik

  • Aktivní člen
  • *
  • Příspěvků: 182
Re: Skript
« Odpověď #12 kdy: 27 Května 2008, 15:02:17 »
Ahoj, vím že je to podobny problem, ale stejnak si s ním nevím rady. Chci si udělat takovy jednoduchy skript, ktery pomoci acping zjisti MAC adresu. v promenne $MAC mam vzdy mac adresu nejakeho pc, kterou chci ulozit do souboru zk. Pokud spustim skript podruhe, potrebuju a by mac adresy kterou uz v souboru jsou se nezapsaly, a nove(ty ktere v souboru "zk" nejsou se do nej zapsaly. Myslel jsem ze by to mohlo vypadat nejak takto:
#!/bin/bash for ip_adresa in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16; do
echo "testuje se adresa $ip_adresa"
MAC=`arping -c 1 -I eth0 192.168.30.$ip_adresa | egrep -o '\[.*\]' | tr -d []`
echo "promenna MAC je $MAC"
if [ $MAC==cat /home/pou/Plocha/zk|grep $MAC];
then echo "adresa uz v souboru je"
else
$MAC >> /home/pou/Plocha/zk
fi

kkaarreell

  • Stálý člen
  • **
  • Příspěvků: 1072
Re: Skript
« Odpověď #13 kdy: 27 Května 2008, 15:26:15 »
Upravil jsem trochu ten predchozi. Hledanou IP predavas jako parametr pri spousteni skriptu. Vypln si ten soubor s evidenci MAC adres.
Kód: [Vybrat]
#!/bin/bash

FILE="SOUBOR_S_MAC"
INTERFACE="eth0"


IP=$1

echo "hledam MAC adresu prislusici k IP $IP"

MAC=`arping -c 1 -I $INTERFACE $IP | egrep -o '\[.*\]' | tr -d []`

if [ "$PIPESTATUS" = "0" ]; then
  echo "MAC: $MAC"

  if grep -q "$MAC" $FILE; then
    echo "adresa je jiz evidovana"
  else
    echo "$MAC" >> $FILE
    echo "adresa pridana do evidence"
  fi

else
  echo "MAC se nepodarilo nalezt"
fi

pousteVnik

  • Aktivní člen
  • *
  • Příspěvků: 182
Re: Skript
« Odpověď #14 kdy: 27 Května 2008, 17:51:55 »
Moc děkuju :-) funguje !!!

 

Provoz zaštiťuje spolek OpenAlt.