Forgalom meres

Fórumok

Forgalom meres

Hozzászólások

tcpdump -ln 'tcp[13]&8=8' | perl -e 'while(<>) { my @f=split(" "); chop($f[4]); $f[6]=~s/.*\((.*)\).*/\1/; print "At $f[0], from $f[2], to $f[4], length $f[6]\n"; }'

Kicsit write-only, úgyhogy kifejtve:
- a 'tcpdump' sasolja a hálóforgalmat (ha csak adott interface kell, akkor add meg még neki a '-i' -vel, pl. '-i eth3')
- a '-l' miatt soronként írja az eredményt, nem az alapértelmezett 4k-nként
- a '-n' miatt az ip-címeket számként írja (nem névként), ez van összevonva a fentivel '-ln'-né
- a 'tcp[13]&8=8' szűrőfeltétel miatt csak a tcp adatot vivő (PSH flag) csomagokat nézi

Ez eddig ilyen sorokat produkálna:
16:51:48.014999 IP 127.0.0.1.35503 > 127.0.0.1.9001: P 1702805880:1702805887(7) ack 1694442391 win 32767 <nop,nop,timestamp 25477334 25472684>

Az eleje az időbélyeg, a '>' előtt és mögött a forrás- és a cél ip és port van, a csomagban lévő adat hossza pedig az 'ack' előtti mező végén zárójelek között található. Na ez megy bele az alábbi kis perl scriptbe:
[code:1:339703ac08]
while(<>) # vegig a stdin sorain
{
my @f=split(" "); # szokozok menten szetvagjuk, a mezok $f[x]-kent erhetok el
chop($f[4]); # a cel-ip vegerol lecsapjuk a kettospontot
$f[6]=~s/.*\((.*)\).*/\1/; # a 6. mezobol csak a zarojelek kozotti reszt (hossz) hagyjuk meg
print "At $f[0], from $f[2], to $f[4], length $f[6]\n"; # es kiiratjuk
}
[/code:1:339703ac08]
Ez így ilyesmit generál:
At 16:47:57.959578, from 127.0.0.1.35494, to 127.0.0.1.9001, length 6

A print-ben láthatóan a $f[0] az időbélyeg, a $f[2] a forrás-, a $f[4] a cél-ip és port, a $f[6] pedig a csomag adattartalmának a hossza. Ezt aztán pakolhatod a neked tetsző formátumba, tolhatod file(ok)-ba, vagy ha elég lassú a hálózatod, akár helyi adatbázisba is :).
Kapcsolódó manpage-ek: tcpdump, perlrun, perlfunc, perlop.
Elég fusi, de ennél testreszabhatóbb kész progit még nem találtam.

Sok szerencsét :) !

Meghajolok nagyságod előtt, gsimon. De tényleg. Ez aztán kimerítő válasz volt. :-) Unatkozol? :D

Huh ez szep, de kozben legyozve lustasagom rakerestem a forumban. Talaltam is errol szolo topicot es ott ajanlanak 3 felet is. Az ipaudit jo lenne, de az eleg erdekes formatumban irja ki az eredmenyt. Azert koszi.

Nem tudom, mit ertesz a forgalom meresen, de ha kovetni akarod (tehat nezni) a forgalmat akkor probald ki: "trafshow -n -i eth1".

Mondjuk havi osszesitett ip-re lebontott forgalom merest szeretnek.

[quote:b9ed89cd7c="dragi"]Mondjuk havi osszesitett ip-re lebontott forgalom merest szeretnek.

mi erre egy ipac-ng nevu borzalmat hasznalunk, de csak akkor ajanlom ha mar meg vagy oszulve :D
hajmereszto a config file syntax, doksi nincs es meg lehet sorolni. de egy-ket het konfigolas utan szepen muxik, es nem kell neki promisc mod ;)
ime a link: http://ipac-ng.sourceforge.net/

Sziasztok

Egy ilyen programot keszitettem a minap, ha minden jol megy akkor honap vege fele lesz publikus verzio... (remelem nem kiabalom el, mert ezt mondogatom febr. ota)

York.

A kerdesem az lenne, hogy egy linux-iptables routeren atfolyo forgalmat hogy lehet merni ip cimekre lebontva, tehat a kliensek forgalmat szeretnem merni.

Szia

Igen elkeszultem a programmal.
http://openproject.hu/myntcd itt olvashatsz rola.
Jelenleg meg kiadott verzio nincs, de ez az elfoglaltsagomnak es lustasagomnak koszonheto:(. SVN-bol le tudod tolteni, ha nem menne akkor keress meg nyugodtan provatban.

York.

------
"Nyugi! Minden a legnagyobb rendben csúszik ki a kezeim közül..."

Sziasztok!

Addig tudtok nekem segíteni?
Azt akarom csinálni, hogy kiveszem egy parancsal az ifconfig eth0 kimenetéből az RX bytes értéket (pl 170,1) ez ugye MB és beleteszem egy változóba (pl meres1).
Utána kellene egy parancs amit egyszer láttam egy szkriptbe, hogy vár x időig (pl 10mp) és folytatja a szkript futtatását a következő sorral amiben szintén az előző parancs fog lefutni, de most az értékel a meres2-be teszi. Aztán ezekkel kivonok meg osztok és meglesz, hogy épp abban a 10mp-ben milyen adatforgalom van lefelé az eth0 interfészen.
Tudja valaki?

Azért, mert egyszerűen nem szeretem. Eléggé nehézkes nekem, kínlódok a szintaktikájával, a hashek hiányával, perlben meg minden megvan, ami egy gyors hackoláshoz kell, kényelmes, kézreálló, eléggé all around, összességében szerintem egy elég jó kis nyelv.

Mondjuk vannak ennek is bajai, OO pl szerintem nagyon nagyon erőszakolt benne, elég nagy gond a CPANon fellelhető dolgok igen változatos minősége, nagyobb projektnek nem biztos hogy nekiállnék benne, ha nem muszáj. (bár ez lehet csak az én hiányosságom :) )

Persze van ahova nem való, mert fölösleges bloat, de szerintem scriptnyelvnek nagyon kényelmes. (Kollégám szerint meg a bash az, ezért ő mindent abba csinál, én mindent ebbe, és ha a másikéhoz kell hozzányúlni, akkor kölcsönösen csuklunk :D)

őőő, igen, ez azért van, mert eléggé tömörítettem :)

Kissé átláthatóbban a csúnya


($a) = `ifconfig eth0` =~ /RX bytes:(\d+)/;

sor kb így nézne ki:


$ifconfig_kimenete = `ifconfig eth0`;
$ifconfig_kimenete =~ /RX bytes:(\d+)/;
$a = $1;

Akkor azt elmondva, hogy a =~ a reguláris kifejezés illesztő operátor, és utána a reguláris kifejezésben található zárójelezett részekre illeszkedő minták rendre a $1 $2 .. $n változóba kerülnek, akkor gondolom már érthető :) Csak nem pakoltam ki a kimenetet változóba, illetve kihasználtam azt, hogy az =~ operátor visszatérési értéke egy lista, aminek elemei $1...$n, meg azt, hogy egy lista elemeit meg lehet feleltetni egy másik lista elemeinek sima = használatával. csak most a lista egyelemű lett, ezért mutat kicsit furcsán a zárójelben lévő $a :)

A sleep jó volt köszi, de még a számokkal bajban vagyok.

ered=`expr $meres2 \- $meres1`
Ez sajnos csak egész számokat kezel, de pl 23,3 számokat már nem. Erre is tudtok megoldást?