[Megoldva] Script IP -> MAC megfeleltetéshez

Sziasztok

A következő feladatot kellene megoldanom:
Adva van két hálózat több virtuális géppel.
Szeretném, ha a gépeknek kiosztott IP címek visszaköszönnének a MAC-en is.
192.168.22.100 -> xx:yy:zz:22:10:0c
192.168.33.5 -> xx:yy:zz:33:00:5c
192.168.33.50 -> xx:yy:zz:33:05:0c
192.168.33.150 -> xx:yy:zz:33.15:0c

Az xx, yy, zz, c előre deffiniált értékek, most nem érdekesek. 192.168. szintén fix, nem kell feltüntetni.
A lényeg, hogy a MAC második felében fel kellene tünteni az IP végét. Ráadásul helyiérték helyesen, azaz .5 az 005

Az IP-ket én mondom meg egy generáló scripttel, ezt kellene bővíteni, hogy automatikusan generáljon hozzá MAC-et.

Nekem egy awk-val történő felbontás, for ciklusos számolós tákolás jutott eszembe, de félek gányolás lenne.
Van valakinek esetleg egy jó ötlete?

Előre is köszönöm!

Ui. bash, perl előnyben

Update: 2013.02.06.
Köszönöm mindenkinek a segítséget.
A legfrappánsabb megoldást ekképpen használtam fel:


tag="22.215"

ip="192.168.$tag"
MAC=`IFS=. ; echo "$tag" |  while read a b ; do c=$(printf "%03da\n" $b); echo "00:16:3e:$a:${c:0:2}:${c:2}" ; done`
echo $MAC

vm_uuid=$(xe vm-list name-label=$xen --minimal)
vif_uuid=$(xe vm-vif-list vm=$xen --minimal)
network_uuid=$(xe vm-vif-list vm=$xen params=network-uuid --minimal)

xe vif-destroy uuid=${vif_uuid}
xe vif-create network-uuid=${network_uuid} vm-uuid=${vm_uuid} device=0 mac=${MAC}
echo "...Done."

Így a Citrix Xenserverben futó VM-ek MAC címét szépen át lehet írni, nem az általa generált teljesen random MAC lesz. Nem utolsó sorban az arp-scan ezen VM-eket xen-ként fogja azonosítani.

Hozzászólások

arp? :)

------------------------

Nincs a világon se jó, se rossz. A gondolkodás teszi azzá... (W. Shakespeare)

Azzal a másik fele lesz megoldva. Az arp-scannel ellenőrzöm, hogy nincs-e sumákság :)
Az IP <-> MAC ellenőrzést így egyszerűbbnek találtam, mintha valahol letároltam volna a rendszerek MAC címét és az ellenőrzéskor mindig ki kellene onnan keresni, hogy mi tartozik hozzá.

Én egy ilyet raktam össze magamnak, nem tudom hogy neked is erre van-e szükséged, vagyis hogy lássad a hálózatban hogy adott gépek milyen IP-vel figyelnek, mindezt MAC cím alapján azonosítva.

a 33.15ot es a 33.150et hogy tervezed abrazolni?

Nem lenne egyszerubb hostnevben tarolni az ip informaciot?

IFS=. ; while read a b ; do c=$(printf "%03dc\n" $b); echo "$a.$b -> xx:yy:zz:$a:${c:0:2}:${c:2}" ; done <<<$'22.100\n33.5\n33.50\n33.150'

tudom láma vagyok de valaki elmagyarázná ezt:
do c=$(printf "%03dc\n" $b)
echo "$a.$b -> xx:yy:zz:$a:${c:0:2}:${c:2}"
done <<<$'22.100\n33.5\n33.50\n33.150'

az érték adás asszem ok:
Here Strings
A variant of here documents, the format is:
<<
The word is expanded and supplied to the command on its standard input.

A printf pedig paraméterezve hogy b változót 3 elemű értékként írja ki és a végére egy c-t és egy soremelést
tesz.

de az echo "$a.$b -> xx:yy:zz:$a:${c:0:2}:${c:2}" ez nekem most nem tiszta.
ok, kitolja az a és b változó értékét de mi ez a nyíl? valamint a kapcsos zárójelek? esetleg ez:
${parameter:offset:length} azaz parameter exansion?
--
A legértékesebb idő a pillanat amelyben élsz.
http://phoenix-art.hanzo.hu/
https://sites.google.com/site/jupiter2005ster/

nem ugrattalak. a nagy karakter bűvölésben nem ismertem fel hogy az ott egy sima string és "nincs" jelentősége a script végeredményére, csak a kinézetére.
komolyan nem esett le még a kozmetika után sem :(

de köszönöm a magyarázatot.
--
A legértékesebb idő a pillanat amelyben élsz.
http://phoenix-art.hanzo.hu/
https://sites.google.com/site/jupiter2005ster/

"a nyilacskára tudnál egy másik példát is mutatni?"
Melyik "nyilacskára" gondolsz? Az echoban lévő nyíl egyszerű szöveg, ahogy fent lx is írta, csupán a végeredmény megjelenítésének szépítése céljából. Kozmetika. De valószínűtlennek tartom, hogy erre vonatkozott volna a kérdés, mert nagyon triviális.

  # echo 'Egyre hosszabb jobbra mutato nyilak -> --> ---> ----> -----> itt a vege'
  Egyre hosszabb jobbra mutato nyilak -> --> ---> ----> -----> itt a vege
  #

Ha viszont az "<<<" jelölésre gondoltál nyílként, akkor éppen te idézted a bash manualjának ide vonatkozó részének elejét, csak pont a lényeget nem: "The word is expanded and supplied to the command on its standard input."

  # cat <<< Szoveg
  Szoveg
  #

Csak én vagyok olyan konzervatív, hogy azt mondom, MAC címet tömegesen változtatni nem világbajnok ötlet?

Nem csak te... Az egésznek maximum virtualizált környezetben van relevanciája, a virtuális hálózati csatolók hardvercímének legyártásakor. Mivel a MAC második fele bárhol átírható, így azonos gyártó eszközével simán fejen lehet csapni a MAC-szűrést, már ha erre kell neki. Mondjuk ezen az alapon akár DECnet-et is használhatna, ha jól rémlik, ott is fix kapcsolat volt a MAC és a DECnet címzés között :-P

Idéznék a bevezetőből:

"A következő feladatot kellene megoldanom:
Adva van két hálózat több virtuális géppel."

Mondjuk *természetesen* ez nem egyenértékű azzal, amit te írtál, de én az első pillanattól arra gondoltam, hogy ezt a vicces "átnevezést" virtuális gépekkel óhajtja megtenni, és nem élesekkel. VM-ek esetén támogatom, fizikai gépek esetén egy nagy -1.

Figyelmetlen voltam - hiába, én is öregszem :-P Virtualizációnál én is az ip-ből generált mac használata mellett teszem le a voksomat (simán négy hexadecimális bájtként hozzácsapva az adott környezetre jellemzően felvett aa:bb prefixhez) - biztos, hogy nem lesz ütközés mac-szinten sem, ráadásul a dhcp konfigot is egyszerűen lehet generálni hozzá :-)