Schrift
[thread]8648[/thread]

Net::Ping - tcp oder icmp?: Was ist besser?

Leser: 2


<< >> 9 Einträge, 1 Seite
format_c
 2007-01-16 16:38
#73245 #73245
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hi blöder Frage meiner Seite,

Das ping Tool was auf jeder UNIX und Linux Distribution vorhanden ist verwendet ja als Protokoll das ICMP.
Das Modul CPAN:Net::Ping verwendet standardmäßig TCP als Übertragungsprotokoll, man kann allerdings auf ICMP einstellen.

Jetzt die Frage. Was sollte man besser nehmen?

Gruß Alex
sid burn
 2007-01-16 18:20
#73246 #73246
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Also der ICMP Ping ist eigentlich der richtige Ping. ICMP Ping wird von Unix ähnlichen Betriebssystemen verwendet. Der TCP Ping wird hauptsächlich von Windows Maschienen Benutzt.

Die ICMP Pakete für einen ICMP Paket kannst du allerdiengs nur mit root Rechten erzeugen. Wenn du also eine Applikation schreibst mit der du Pingen möchtest und diese Applikationen nicht mit root Rechten läuft, dann bleibt dir nichts anderes übrig als ein TCP Ping zu benutzen.

Naja ansonsten gibt es halt noch die Standard unterschiede zwischen TCP und dem ICMP Protokoll. TCP ist verbindungsorientiert, und sollte demzufolge langsamer sein. Vor allem wenn du sehr viele Rechner Pingst sollte es auffallen, da du für jeden Ping eine Verbindung aufbauen must bei TCP.

ICMP sollte deutlich schneller sein. Du musst keine Verbindung aufbauen, hast aber auch keine Garantie das dein Paket ankommt, oder die Antwort bei dir ankommt.


Ansonsten könntest du noch auf Packet Filter Ebene einen Vergleich nehmen. Da ICMP zur Fehlerdiagnose dient sollte es eigentlich nicht gefiltert werden. Leider gibt es in den weiten des Internet genug Hirnverbrandte Admins die es trotzdem tun. Kann also immer sein das die eine Methode nicht klappt, aber dafür die andere Methode geht. Oder eben beide nicht.
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
betterworld
 2007-01-16 19:58
#73247 #73247
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=sid burn,16.01.2007, 17:20]TCP ist verbindungsorientiert, und sollte demzufolge langsamer sein.[/quote]
Ich weiss nicht, wie Net::Ping das macht, aber wenn man Root-Rechte hat, muss man keine Verbindung aufbauen, sondern einfach nur ein SYN-Paket schicken und abwarten, ob ein Port-Unreachable- oder (SYN/)ACK-Paket zurueckkommt (je nach dem, ob der Port zu oder offen ist). Dieses Paket laesst man dann einfach vom Kernel behandeln, was dann im zweiten Fall dazu fuehrt, dass noch ein RST-Paket zurueckgeht, aber das wirkt sich nicht auf die Performance aus.

Der Vorteil von TCP-Ping ist afaik, dass man bei einem TCP-Ping auf z. B. Port 80 durch so ziemlich jede Firewall durchkommt. Das ist bei ICMP-Pings nicht immer der Fall.

In der Dokumentation von Nmap kann man darueber auch noch einiges lesen.

ICMP-Pings kann man uebrigens auch ohne Root-Rechte ausfuehren, wenn man dazu das ping-Programm benutzt, weil es normalerweise setuid ist. Das ist dann allerdings wirklich nicht gerade schnell.\n\n

<!--EDIT|betterworld|1168970563-->
format_c
 2007-01-16 21:16
#73248 #73248
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Habs grad im Sniffer nachvollzogen. Das läuft so wie betterworld es beschreibt. Was nun schneller ist.... mmmh da werd ich wohl mal Benchmark bemühen.


Danke trotzdem - halte euch über das Ergebnis auf dem Laufenden.


Gruß Alex
format_c
 2007-01-16 22:30
#73249 #73249
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hier das Ergebnis:
Code: (dl )
1
2
3
4
5
6
format_c@boston ~ $ su -c "perl test.pl 192.168.0.6"
Password:
Benchmark: timing 1000000 iterations of ICMP: , TCP: ...
ICMP: : 229 wallclock secs (58.44 usr + 16.73 sys = 75.17 CPU) @ 13303.18/s (n=1000000)
TCP: : 326 wallclock secs (137.08 usr + 36.07 sys = 173.15 CPU) @ 5775.34/s (n=1000000)
format_c@boston ~ $


Und hier das Skript:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use strict;
use Net::Ping;
use Benchmark;

my $tcp = Net::Ping->new("tcp");
my $icmp = Net::Ping->new("icmp");

timethese(1_000_000,
        {
               
 "TCP:  " => sub { $tcp->ping($ARGV[0]); } ,
               
 "ICMP: " => sub { $icmp->ping($ARGV[0]); }
        }
);




Gruß Alex\n\n

<!--EDIT|format_c|1168979486-->
sid burn
 2007-01-17 00:03
#73250 #73250
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
Quote
ICMP-Pings kann man uebrigens auch ohne Root-Rechte ausfuehren, wenn man dazu das ping-Programm benutzt, weil es normalerweise setuid ist. Das ist dann allerdings wirklich nicht gerade schnell.

Naja das setuid bit führt ja dazu das der ping Befehl letztendlich nicht mit Benutzerrechten ausgeführt wird, sondern mit den Rechten des Owners, und der ist root.

Das man also für ICMP root Rechte braucht sehe ich jetzt immer noch nicht unbedingt als Fehler an. ;)


Ansonsten wenn man den letzten Benchmark nimmt dann ist ICMP anscheind doppelt so schnell. Ich würde aber trotzdem TCP nehmen. knapp 6000 checks pro sekunde sollte bei weitem ausreichen. Ansonsten sehe ich es eher als Vorteil an das man keine root Rechte barucht.

Und weiterhin das was Betterworld sagte. Das man Port 80 etc. überprüfen kann. Jedenfalls einen Port der möglicherweise nicht durch einen Paket Filter gefiltert wird. Bei ICMP gibt es ja leider genug Leute die es filtern.

Sind ja auch sehr Böse Hacker Angriffe!!!einseins!
Und ZoneAlarm schützt mich davor!!einself!
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
betterworld
 2007-01-17 00:15
#73251 #73251
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=sid burn,16.01.2007, 23:03]
Quote
ICMP-Pings kann man uebrigens auch ohne Root-Rechte ausfuehren, wenn man dazu das ping-Programm benutzt, weil es normalerweise setuid ist. Das ist dann allerdings wirklich nicht gerade schnell.

Naja das setuid bit führt ja dazu das der ping Befehl letztendlich nicht mit Benutzerrechten ausgeführt wird, sondern mit den Rechten des Owners, und der ist root.

Das man also für ICMP root Rechte braucht sehe ich jetzt immer noch nicht unbedingt als Fehler an. ;)[/quote]
Ich will auch gar nicht behauptet haben, dass das ein Fehler ist. Dazu ist ja das setuid-Bit da: Dass man halt nur genau dieses eine Programm ausfuehren darf, welches dann eine ganz bestimmte Sache tut, die man sonst nicht duerfte.

Und Fakt ist ja, dass jeder Benutzer das ping-Programm ausfuehren darf. Das wollte ich nur erwaehnen, da man mit Net::Ping und dem "external"-Protokoll eben dieses ping-Programm benutzen kann.
betterworld
 2007-01-17 00:21
#73252 #73252
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
[quote=format_c,16.01.2007, 21:30]Hier das Ergebnis:
Code: (dl )
1
2
3
4
5
6
format_c@boston ~ $ su -c "perl test.pl 192.168.0.6"
Password:
Benchmark: timing 1000000 iterations of ICMP: , TCP: ...
ICMP: : 229 wallclock secs (58.44 usr + 16.73 sys = 75.17 CPU) @ 13303.18/s (n=1000000)
TCP: : 326 wallclock secs (137.08 usr + 36.07 sys = 173.15 CPU) @ 5775.34/s (n=1000000)
format_c@boston ~ $
[/quote]
Jetzt ist nur die Frage, wie wichtig fuer die Realität das Szenario ist, dass ein Rechner 1000000 mal direkt hintereinander gepingt wird ;)
sid burn
 2007-01-17 06:28
#73253 #73253
User since
2006-03-29
1520 Artikel
BenutzerIn

user image
[quote=betterworld,16.Jan..2007, 23:21][quote=format_c,16.01.2007, 21:30]Hier das Ergebnis:
Code: (dl )
1
2
3
4
5
6
format_c@boston ~ $ su -c "perl test.pl 192.168.0.6"
Password:
Benchmark: timing 1000000 iterations of ICMP: , TCP: ...
ICMP: : 229 wallclock secs (58.44 usr + 16.73 sys = 75.17 CPU) @ 13303.18/s (n=1000000)
TCP: : 326 wallclock secs (137.08 usr + 36.07 sys = 173.15 CPU) @ 5775.34/s (n=1000000)
format_c@boston ~ $
[/quote]
Jetzt ist nur die Frage, wie wichtig fuer die Realität das Szenario ist, dass ein Rechner 1000000 mal direkt hintereinander gepingt wird ;)[/quote]
Naja, wenn du DDoS Attacken starten möchtest, ist die Anzahl schon wichtig. ;)
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de
<< >> 9 Einträge, 1 Seite



View all threads created 2007-01-16 16:38.