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/.

Członek DUG


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




Moderator Mamut
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

Członek DUG


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




Użyszkodnik
Zobacz mój post w wątku o monitorowaniu sieci.
bercik: proszę, zintegruj edytor programistyczny ze słownikiem ortograficznym. „wykoŻystujemy”, „dwUch”. Wstyd.
Offline

Członek DUG


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


Członek DUG

Członek DUG


witam
dziekuje za szybką odpowiedź, to jeszcze zapytam o jedną rzecz, teraz ładnie pomija linijki, jednak zostawia puste wiersze
moznaby to jakoś wyciąć ?
Offline


Członek DUG
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

Członek DUG


witam,
niestety z $1 i $0 jestt ten sam wynik
pozdrawiam
Offline


Członek DUG

Członek DUG


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


Członek DUG
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

Członek DUG


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


Członek DUG
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
doneMam nadzieję, że okazało się to pomocne :)
Ostatnio edytowany przez urug (2008-12-26 14:41:43)
Offline

Członek DUG


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

Członek DUG


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


Członek DUG

Członek DUG


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


Członek DUG
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]}"
doneOstatnio edytowany przez urug (2008-12-27 00:59:36)
Offline

Członek DUG


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

Członek DUG


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


Członek DUG

Członek DUG


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
doneniestety dostaje pusty wiersz
pozdrawiam
Offline


Członek DUG
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

Członek DUG


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