Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
witam
szukałem szukałem , mozę nie umiałem znaleźć, ale mam mały problem, mam napisany skrypt z regółami firewall-a, aby roździelać necik
wszystko działa pięknie ładnie tak jakbym chciał, jednak przy zmianie adresów mac, ip mam troszkę pracy przy zmianach
w pliku rc.firewall, komputery, które mają mieć dostęp do netu mam zmienną KOMPn - gdzie n to końcówka IP kompa
np:
KOMP2=192.168.0.2
i mam tak około 40 komuterów w sieci, gdzie numery IP są nie pokolei
mam tam ograniczanie ilości połączeń, markowanie, przypisanie mac, przekierowania portów itp
i mam to załatwoione poprzez odpowiednie reguły , jednak chciałbym sobei to jakoś uprościć, czuyli np:
abuy z pliku rc.firewall. ip pobrał IP kompa, nazwę zmiennej, mac, itp
i tutaj nie wiem jak podlinkować dane z innego pliku ( kupiłem sobie już książke do pisania skryptów, jednak tam nic o tym nie pisze)
chciałbym mieć w pliku taki zapis
KOMP2 =192.168.0.2;adres_mac;numer_markowania
a druga rzecz to chciałbym to potem załatwić w głównym skrypcie poprzez pętlę jednak, jako że nazwy zmiennych są ni po kolei to po puszczeniu takiej pętli np
i=2
while [$i -lt 255]
do
iptatables -t mangle -A UPLOAD -s KOMP$i -j MARK --set-mark ($i+1000)
i=$[$i+1]
done
wyskoczą mi błędy, że nie mam przyporządkowanych adresów IP w skrypcie,
będę wdzięczny jak mnie ktoś jak to rozwiązac , nie chce gotowca, mozę jakieś przykłady lub wskazówki
ppozdrawiam
T.M.
Offline
ja bym to zrobil poprzez czytanie tych linijek read z odpowiednio ustawiona zmienna definujaca separator ... i wpisaniu tego do tablic bashowych ...
przyklad (troche inaczej bo tak dzielone jest juz pole tablicy) - http://www.opcode.eu.org/sieci_komputerowe_uslugi/s … ng/routing.sh
Offline
witam
mógłby mi ktoś napisać jeden przykład jak przeczytać z pliku rc.firewall_ip linijke do głównego pliku firewall rc.firewall aby mi podpiął odpowieni mac dla regułki:
iptables -A FORWARD -i eth1 -o eth0 -s $KOMP6 -m mac --mac-source [numer_mac z pliku] -j ACCEPT
dane w pliku rc.firewall_ip są zapisywane w następujący sposób
KOMP6:adres_ip:adres_mac:numer_markowania_download:numer_markowania_upload
oglądałem skrypty bercika ale niestety chyba za cienki jestem aby to zrozumieć, będę wdziećżny za podpwoiedzi, bo mnie już cholera chyta za przeproszeniem,
tylko taka uwaga: perl nie wchodzi w rachubę
pozdrawiam
Offline
Zobacz mój post w wątku o monitorowaniu sieci.
bercik: proszę, zintegruj edytor programistyczny ze słownikiem ortograficznym. „wykoŻystujemy”, „dwUch”. Wstyd.
Offline
witam
Wszystkiego Najlepszego Wszystkim z okazji Świąt Bożego Narodzenia, zdrowia przede wszystkim, reszta mało istotna
ale mam pytanko odnośnie read line i awk
bo gdy używam pętli:
while read line ; do
host=$(echo "$line" |awk -F , '{print $1}')
echo -e "$host" >>tmp
done < /home/tom/firewall_ip
a w pliku firewall_ip mam komentarze, to awk mi je przekopiowuje, jak zrobić aby nie pobierać do zmiennej host komentarzy
będę wdzięczny z ainformacje pozdrawiam
T.M.
Offline
witam
dziekuje za szybką odpowiedź, to jeszcze zapytam o jedną rzecz, teraz ładnie pomija linijki, jednak zostawia puste wiersze
moznaby to jakoś wyciąć ?
Offline
To może teraz tak:
awk -F , '{ if ( $1 !~ /^[ \t]*$/ && $1 !~ /^#/ ) print $1}'
Jeśli to nie zadziała, to zamiast $1 w ifie daj $0 (w 2 miejscach).
Ostatnio edytowany przez urug (2008-12-26 13:34:11)
Offline
witam,
niestety z $1 i $0 jestt ten sam wynik
pozdrawiam
Offline
to sa dane wejsciowe:
# plik z danymi do udostepniania internetu
# dane w pliku zapisane sa w nastepujacym schemacie
# numer_ip,mac_karty,mark_download,mark_upload,htb_download,htb_upload # opis komputera
# wykaz komputerow ktore maja dostep do sieci internet
#------------------------------------------------------------------
#
#
192.168.0.2,adres_mac,2,1002 # 2
192.168.0.3,adres_mac,3,1003 # 3
192.168.0.4,00:adres_mac,4,1004 # 4
192.168.0.5,adres_mac,5,1005 # 5
#
192.168.0.6,adres_mac,6,1006 #6
192.168.0.7,adres_mac,7,1007 #7
#
192.168.0.8,adres_mac,7,1007 #8
w takiej postaci są
pozdrawiam
Offline
urug@smigacz:sandpit$ awk -F , '{ if ( $1 !~ /^[ \t]*$/ && $1 !~ /^#/ ) print $1}' plik.txt 192.168.0.2 192.168.0.3 192.168.0.4 192.168.0.5 192.168.0.6 192.168.0.7 192.168.0.8 urug@smigacz:sandpit$
Hmm, u mnie to działa.
Offline
a mi następujący kod:
#### podajemy sciezke dla programow
####
PATH=/sbin
AWK=/usr/bin/gawk
### testowy skrypt
while read line ; do
host=$(echo "$line" |$AWK -F , '{ if ( $1 !~ /^[ \t]*$/ && $1 !~ /^#/ ) print $1}')
echo -e "$host" >>tmp
done < /home/tom/firewall_ip
zostawia dziury w pliku tmp po komentarzach :(
pozdrawiam
Offline
Zostają dziury, bo nie sprawdzasz zawartości host (I nawet gdy ta zmienna jest pusta, to do pliku tmp jest wrzucana nowa linia przez echo).
Rozwiązaniem może być zmienienie w awku printa na: print $1, "\n"
a echo na: echo -n ...
Swoją drogą, myślę że lepszym dla Ciebie rozwiązaniem będzie utworzenie po prostu tablicy tych adresów IP...
TABLICA=( $(awk -F , '{ if ( $1 !~ /^[ \t]*$/ && $1 !~ /^#/ ) print $1}' plik.txt) ); for i in ${TABLICA[*]}; do echo $i done
Mam nadzieję, że okazało się to pomocne :)
Ostatnio edytowany przez urug (2008-12-26 14:41:43)
Offline
Dziękuje bardzo
teraz działa
chcę to wykorzystać w petlach iptables, i za chiny ludowe nie mogłem wykombinować jak to wsadzić w petle
ale dzięki wielkie
Offline
witam
tak sie jeszcze zapytam co do tablic
jak zrobić aby tablica była dwu wymiarowa i zawierała wpis [numer_ip mac]
i jak to potem wyciągnąć w petli aby można było podstawić w kodzie np:
iptables -A FORWARD -i eth1 -o eth0 -s $numer_ip -m mac --mac-source $mac -j ACCEPT
pozdrawiam
T.M.
Offline
witam
to wiem ze moge dwie tablice
ale potem musze w wyzej wymienionym kodzie zastosowac odpowiednie wpisy co do zmiennych $numer_ip i $mac
i jak zrobie to w dwoch petlach, to niestety każdemu Ip przypisany jest każdy mac
chyba ze cos zle robie
pozdrawiam
Offline
To wtedy w 1 pętli odwołujesz się do obu tablic (Muszą mieć tą samą wielkość, inaczej będzie klops)
TAB1=(1 2 3 4 5) TAB2=(5 4 3 2 1) for (( i = 0; $i < ${#TAB1[*]}; i++ )); do echo "${TAB1[i]} ${TAB2[i]}" done
Ostatnio edytowany przez urug (2008-12-27 00:59:36)
Offline
widzę, że dziś dzień dobroci dla zwierząt
bardzo dziękuje, sprawdzone działa jak powinno, jestem bardzo wdzięczny
może kiedyś odwdzięcze się czymś
i widzę, że jeszcze mnie baaaaaardzo dużo pracy czeka nad sobą, i nad tym jak pisać skrypty
pozdrawiam i jeszcze raz dziękuje
Offline
witam,
jeszcze takie teoretyczne pytanie, pewnie znowu awk się kłania:
jest sobie plik o nazwie host_ip a w nim dane według schematu:
192.168.10.10|00:00:00:00:0:00|5|121|1121|256kbit|10kbit|256kbit|3kbit|96kbit|a 192.168.10.11|00:00:00:00:0:00|5|122|1122|256kbit|10kbit|256kbit|3kbit|96kbit|b 192.168.10.12|00:00:00:00:0:00|5|123|1123|256kbit|10kbit|256kbit|3kbit|96kbit|a 192.168.10.13|00:00:00:00:0:00|5|124|1124|256kbit|10kbit|256kbit|3kbit|96kbit|a
i z tego pliku chcę stworzyć tablice tylko z wierszami które na pozycji 11 mają literę a, czy moze mi ktoś powiedzieć jak to zrobić coś na styl
TABLICA=( $(awk -F , '{ if ( $1 !~ /^[ \t]*$/ && $1 !~ /^#/ ) print $1}' host_ip) );
będę wdzięczny za pomoc
pozdrawiam
T.M.
Offline
witam
prz probie zrobienia sobie malego testu
TABLICA=( $(awk -F , '{ if ( index($1, "a") == 11) print $1 }' host_ip) ) for i in ${TABLICA[*]}; do echo $i done
niestety dostaje pusty wiersz
pozdrawiam
Offline
Ale wedlug tego schematu który wkleiłeś, 11 znak to jest kropka :P
Poza tym, spróbuj zamiast $1 dać $0 ($0 oznacza cały wiersz wejściowy, nie podzielony separatorem)
Offline
witam
dziękuje za wskazówki, zasugerowałem się, że to jest jedenaste pole a nei jedenasty znak, teraz działa, tylko już chyba ostatnie pytanie jak to połączyć z kodem awk, które wycina wszystko co jest po haszu czyli:
TABLICA=( $(awk -F , '{ if ( $1 !~ /^[ \t]*$/ && $1 !~ /^#/ ) print $1}' plik.txt) ) TABLICA=( $(awk -F , '{ if ( index($1, "a") == 11) print $1 }' plik.txt) )
jak z tego zrobić jeden ciąg
pozdrawiam, bardzo dziękuje, jak będziesz kiedy w Tarnowskich Górach, to stawiam dużego browara, lub co tam najchetniej pijesz
i zyczę szczęśliwego nowego roku
jeszcze raz pozdrawiam
T.M.
Ostatnio edytowany przez rulezdc (2008-12-31 15:07:45)
Offline