Alle IP-Adressen eines Netzwerks ermitteln



  • Jochen Kalmbach schrieb:

    Somit muss also ein Rechner, der nur ausgehende Verbindungen hat keine ARP-Requests (in einem spezailfall der Netzwerkinfrastruktur) beantworten...

    na, so einfach ist das nicht. du gehst davon aus, dass der rechner, der die verbindungsanfrage bekommt, sich die absenderadressen aus dem empfangenen ethernet-paket zieht und in seinen arp-cache packt? das ist aber ein sonderfall.
    normalerweise geht das so:

    rechner1
    --------
    1. anwendung auf rechner1 will tcp/ip zu verbindung zu rechner2 aufbauen
    2. eth adresse der gegenstelle nicht im cache? -> arp request wird geschickt
    3. arp response trudelt ein...

    rechner2
    --------
    1. tcp/ip verbindungsanfrage wird empfangen
    2. eth adresse der gegenstelle nicht im cache? -> arp request wird geschickt
    3. arp response trudelt ein...

    danach haben beide den eintrag im arp cache und es kann normal weitergehen.

    äääh, und ein switch hat darauf auch keinen einfluss, den interessieren nur die ethernet adressen, der kennt weder arp noch tcp/ip ...



  • Ich hab noch was vergessen... es muss noch Router dazwischen sein...



  • Jochen Kalmbach schrieb:

    es muss noch Router dazwischen sein...

    in dem fall 'faked' der router die arp-responses indem er seine eigene mac-adresse da reinpackt (die ip-adresse ist allerdings die vom zielrechner), aber am prinzip ändert sich nix 😉



  • Fazit: Ich hatte unrecht und *jeder* Rechner in einem Segment muss auf einen ARP-Request antworten, sonst kann er gleich das Netzwerkkabel draussen lassen (ausser er will nur mithören 😉 )



  • Jochen Kalmbach schrieb:

    ausser er will nur mithören 😉

    ..oder er macht nur broadcasts 😃
    aber ich glaub' jetzt haben wir den op ganz verwirrt 😉



  • also ich habe mal mit der Funktion SendARP getestet. Wenn ich gezielt eine bekannte IP-Adresse in meinem Netz übergebe funktioniert es, aber sobald ich eine Schleife programmiere indem ich das letzte Byte der IP-Adresse hochzähle bekomme ich auch bei den vorhandenen Adressen eine Fehlermeldung.
    Warum?

    Wie kann ich eigentlich einen Ping absetzen. Eine Funktion SendPing gibt es ja nicht.



  • Uli schrieb:

    also ich habe mal mit der Funktion SendARP getestet. Wenn ich gezielt eine bekannte IP-Adresse in meinem Netz übergebe funktioniert es, aber sobald ich eine Schleife programmiere indem ich das letzte Byte der IP-Adresse hochzähle bekomme ich auch bei den vorhandenen Adressen eine Fehlermeldung.
    Warum?

    was für 'ne fehlermeldung? vielleicht schickst du die ARP's zu schnell hintereinander ab?

    Uli schrieb:

    Wie kann ich eigentlich einen Ping absetzen. Eine Funktion SendPing gibt es ja nicht.

    guckst du: http://www.sockets.com/ms_icmp.htm#Introduction



  • Bzgl. SendARP: Du musst vermutlich einen bestimmten Timeout abwarten... hab es aber noch nie probiert..

    Bzg. Ping: IcmpSendEcho(2)



  • das mit dem Timeout könnte sein. Ich hab das bis jetzt nur ohne Verzögerung probiert. Ist der Timeout eine feste Konstante, kann man die Zeit irgendwie Abfragen oder muß man sie empirisch ermitteln.



  • Hallo,

    ich hab's mal mit IcmpSendEcho probiert, wo man auch einen Timeout angeben kann. Es hat soweit funktioniert, allerdings dauert es natürlich bis er alle Adresse abgeklappert hat.



  • probier doch mal SendARP() gefolgt von 'nem Sleep(300) oder so. vielleicht ist das schneller. ich weiss aber nicht ob 'SendARP()' es nochmal versucht wenn keine antwort kam...



  • das hatte ich vorher schon versucht. SendARP funktioniert nicht mehr, wenn keine Antwort kam.



  • ich habe noch etwas festgestellt:

    Ursprünglich wollte ich nach dem scannen, wenn möglich noch die Hostnamen ermitteln. Die dazu notwendige Socket-Funktion gethostbyaddr benötigt vorher noch den WSAStartup Aufruf. Wenn ich den aber benutze funktioniert IcmpSendEcho nicht mehr.


Anmelden zum Antworten