Entwickler-Ecke

Internet / Netzwerk - Ping ohne Adminrechte


Aya - Di 20.08.13 13:14
Titel: Ping ohne Adminrechte
Hi,

ich möchte gern einen Server pingen und dafür aber nicht auf den commandline befehl zurückgreifen, sondern das ganze in meinem Programm implementieren.

Das ist soweit kein Problem, gibt ja genug beispiele für RawSocket Pings im Internet, allerdings braucht man für alle beispiele Adminrechte...

Die Zeile:

Delphi-Quelltext
1:
socket(AF_INET, SOCK_RAW, IPPROTO_ICMP)                    


funktioniert leider nur bei entsprechenden Admin Rechten, wird aber von allen Beispielen die ich gefunden habe benutzt - gibt es da eine Möglichkeit das auch als normaler User zu nutzen?

Danke,
Aya


Ralf Jansen - Di 20.08.13 13:21

Die WindowsAPI (IcmpSendEcho und Konsorten) sollte das Problem nicht haben.


Christian213 - Di 20.08.13 14:05

Dem kann ich mich nur anschließen. Ich würde grundsätzlich auf raw sockets verzichten, denn dies erfordert nicht nur Adminrechte, sondern man riskiert auch, dass das eigene Programm evtl. von einem Firewall oder Virenscanner als Trojaner fehl erkannt wird.
Ich wage mal zu behaupten, dass man für seriöse Programmierung eigentlich nie in die Verlegenheit kommen sollte raw sockets zu benötigen.
Hier [http://www.delphipraxis.net/1251-ping-delphi-ausfuehren-2.html] findet man übrigens einen Beispielquelltext mit IcmpSendEcho.


jaenicke - Di 20.08.13 14:55

user profile iconChristian213 hat folgendes geschrieben Zum zitierten Posting springen:
Hier [http://www.delphipraxis.net/1251-ping-delphi-ausfuehren-2.html] findet man übrigens einen Beispielquelltext mit IcmpSendEcho.
Der braucht aber auch Adminrechte.

Warum Microsoft das so gemacht hat, weiß ich nicht. Es ist aber so, dass die Pingroutinen (Icmp...), die für Anwendungen zur Verfügung stehen, Adminrechte erfordern. Das eigene Ping-Tool nutzt die aber nicht, nur deshalb funktioniert es ohne Adminrechte...


Ralf Jansen - Di 20.08.13 15:46

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconChristian213 hat folgendes geschrieben Zum zitierten Posting springen:
Hier [http://www.delphipraxis.net/1251-ping-delphi-ausfuehren-2.html] findet man übrigens einen Beispielquelltext mit IcmpSendEcho.
Der braucht aber auch Adminrechte.


Gerade äquivalentes (Windows7 mit C#) ausprobiert. Und es ging ohne Admin Rechte.


Narses - Di 20.08.13 16:48

Moin!

Einen IcmpEcho-API-Wrapper haben wir hier auch :arrow: http://www.entwickler-ecke.de/viewtopic.php?t=53259 ;)

Hier [http://msdn.microsoft.com/en-us/library/windows/desktop/ms740548%28v=vs.85%29.aspx] ist noch ein bischen mehr über das Thema zusammengefasst (notabene die Ausführungen zu den Einschränkungen, die seit XPsp3 angezogen wurden; gab wohl zuviel Schmutzware, die das missbraucht hat :lol:). :idea:

cu
Narses


Christian213 - Mi 21.08.13 08:37

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconChristian213 hat folgendes geschrieben Zum zitierten Posting springen:
Hier [http://www.delphipraxis.net/1251-ping-delphi-ausfuehren-2.html] findet man übrigens einen Beispielquelltext mit IcmpSendEcho.
Der braucht aber auch Adminrechte.


Gerade äquivalentes (Windows7 mit C#) ausprobiert. Und es ging ohne Admin Rechte.

Unter Lazarus kann ich auch IcmpSendEcho mit einem eingeschränkten Benutzer aufrufen?!
Wenn, dann muss das wohl ein RTL-Problem bei Delphi sein.


jaenicke - Mi 21.08.13 08:57

Es geht auch bei mir, aber nur auf einem Rechner, auf einem Firmenrechner nur als Admin. Man kann das also offenbar einstellen.


Martok - Mi 21.08.13 23:58

user profile iconjaenicke hat folgendes geschrieben Zum zitierten Posting springen:
Es geht auch bei mir, aber nur auf einem Rechner, auf einem Firmenrechner nur als Admin. Man kann das also offenbar einstellen.
Die spannende Frage wäre also, wie heißt die Gruppenrichtlinie dazu... in den IP-Sicherheitsrichtlinien ist sowas drin, aber da als Paketfilter. Keine Ahnung wo die API-Einstellungen sind.