Az alábbi script jött össze (a lényege, hogy adott paraméterekkel dumpokat készítsen tcpdump-pal).
Nagyon sürgős lenne vele elkészülnöm és két pontban totál elakadtam.
Az egyik: a $WORKDIR változó mindig üresen marad, hiába adom meg az indításnál a paraméterét (ahová mentse a dump file-okat)
A másik: a tcpdump parancs (a script forráskód vége felé) folyton beleköt valamibe, próbáltam betartani a gyári paraméter sorrendjét (lényeges-e ez egyáltalán ?), de rendszerint ilyesmit kapok:
-G: invalid packet count (ezt a -c opció után, azaz legjobb meglátásom szerint a -c után kapott számot és az azt követő -G kapcsolót egy paraméternek akarja venni és mivel a "-G" nem szám, hibát dob...)
Valaki le tudná nekem ellenőrízni és segíteni/kijavítani ? Mit csináltam rosszul ?
Ezer hála előre is !
(Szerk. Közben felfedeztem, hogy egyetlen változóban sem tárolja el az értéket...azaz mégsem veszi át a paramétereket értékeit
i) INTERFACE=${OPTARG};; #halozati interface valasztas
r) REPEAT_TIME=${OPTARG};; #milyen gyakran kezdjen uj file-t
w) WORKDIR=${OPTARG};; #hova mentse a dumpfile-okat
m) MAXFILES=${OPTARG};; #maximum hany dump file-t tartson meg
Ezek mind tök üresek, csak a while loop-ban tudom kiíratni az értékeiket. Mi lenne a megoldás ? :S)
A script:
#!/bin/bash
while getopts i:r:w:m: option
do
case "${option} "
in
i) INTERFACE=${OPTARG};; #halozati interface valasztas
r) REPEAT_TIME=${OPTARG};; #milyen gyakran kezdjen uj file-t
w) WORKDIR=${OPTARG};; #hova mentse a dumpfile-okat
m) MAXFILES=${OPTARG};; #maximum hany dump file-t tartson meg
esac
echo "Aktualis param: $option "--" $OPTARG" #debughoz
done
echo "Working directory: $WORKDIR" #ez valamiert mindig ures marad !
sudo tcpdump -i $INTERFACE -G $REPEAT_TIME -c $MAXFILES -w "/trace_%Y-%m-%d_%H:%M:%S.pcap"
exit 0
- 5470 megtekintés
Hozzászólások
Eszembe jutott, hogy a while loop gyakorlatilag egy subshell, azért nem látja a változókat.
Áthidaltam a dolgot azzal, hogy a while loop-ban minden egyes iterációnál egy temp file-ba íratom sorrendben a script paramétereinek értékeit, aztán sed-del beolvastatom a loop-on kívül, így működik a dolog. :)
Nem csoda, hogy a tcpdump behülyült..nem is kapott semmilyen értékeket paramétereknek.
Tanulság: éjjel 2-kor már ne írjunk scriptet, ha nem munkahelyen vagyunk. :D
Ugyanakkor, ha valaki megírná, hogyan érhetném el a változókat a while loop-on kívül is, azt megköszönném. Export/declare nem oldja meg a dolgot..
- A hozzászóláshoz be kell jelentkezni
Csak az archívum kedvéért: nem subshell...
De a másik fórumon már részletezték. :)
apropo tcpdump: őrá nem igaz, ami a tshark/wireshark esetén, hogy illetlenség root-ként futtatni? (ahogy elnézem, nem)
Aki tudja, csinálja, aki nem tudja, tanítja... Hm... igazgatónak talán még jó lennék. :)
- A hozzászóláshoz be kell jelentkezni
Nem while miatt nem éred el a változókat, hanem egy szóköz miatt :)
A case "${option} " résznél az ${option} után nem kell szóköz.
- A hozzászóláshoz be kell jelentkezni
Igen, köszönöm, azt közben kiszedtem és minden remek. :)
Lehet, hogy nem szép dolog root-ként futtatni, de másképp meg nem fut le.
Mindegy, ez csak egy gyakorlati feladat nekem.
Üdv
- A hozzászóláshoz be kell jelentkezni