.net - Pinging/Hent MAC-adresse fra IP, ignorerer ARP-cache

Indlæg af Hanne Mølgaard Plasc

Problem



For konfigurationssoftwaren af ​​en række indlejrede enheder skal vi finde enhederne efter IP-adresse. For en given IPv4-adresse skal vi



  • find ud af MAC-adressen (fordi MAC-adressen kan filtreres)

  • Find ud af om enheden kan nås, dvs. ping den.



Jeg er ikke sikker på, hvad den bedste måde at gøre dette på. Først forsøgte vi bare at ringe SendARP og det virker ret godt, men det bruger kun cachen, hvis IP-adressen allerede er derinde, og der gør det synes ikke at være en måde at omgå dette (andet end at spyle hele cachen, hvilket er en privilegeret operation) .Det betyder, at vi skal gøre et andet skridt og bare pinge enheden (jeg tror vi skal først pinge det og derefter ringe til SendARP, hvis det kunne nås), men det synes på en eller anden måde at være et skridt for meget, hvis enheden er tilgængelig. Eller vil den korrekte adresse allerede være i ARP-cachen, hvis pingen lykkedes? IP-adressen kan ændre sin tilsvarende MAC-adresse relativt ofte, fordi forskellige enheder er knyttet i et separat netværk, så jeg tror, ​​at vi skal tvinge en faktisk ARP-anmodning.


Det alternativ jeg kan tænke på, kalder ResolveNeighbor/ResolveIpNetEntry2. I det mindste synes dokumentationen for sidstnævnte at være det, vi har brug for (clear ARP cache for denne IP-adresse og sende en faktisk anmodning), men det er kun Vista eller senere. På XP skal vi ringe ResolveNeighbor, hvilket er enklere, men ikke længere dokumenteret. Dette indebærer at du kontrollerer den rigtige funktion (eller bare ring til ResolveNeighbor, og hvis det fejler, som det dokumenteres at gøre på Vista eller senere, ring ResolveIpNetEntry2).


Jeg er bare ikke sikker på, hvad den bedste måde ville være, eller hvis jeg mangler noget. Hvad vil du anbefale? Bemærk at jeg også tager en ren .NET-løsning, hvis der er nogen;)


Opdater :


Det ser ud til, at ResolveNeighbor, på trods af at være dokumenteret, ikke findes på Windows XP, i det mindste ikke i IPhlpapi.dll. Betyder det, at funktionaliteten ikke er tilgængelig på xp?





For at få det lige, 'jeg hverken designe enhederne eller implementeringsprocessen. For dette problem må du bare antage det



  • Alle enheder har allerede IP-adresser og

  • computeren er i samme undernet, men hører ikke nødvendigvis til netværket (dvs. det er en teknologibærbar computer) og

  • IP-adressen er kendt, når værktøjet starter, dvs. brugeren kan indtaste dem eller læse dem fra en konfigurationsfil og

  • Den samme computer, måske endda uden at genstarte værktøjet, blev brugt blot et par sekunder før at oprette forbindelse til et helt andet netværk med de samme IP-adresser, f.eks. en anden bygning, der er lagt ud på samme måde.



Det betyder, at jeg måske har IP 192.168.0.100 i bygning A, som er MAC-adresse A, og tilslut derefter computeren til bygning B, som også har en IP 192.168.0.100, men denne gang er det MAC-adresse B. Brugeren siger 'Opret forbindelse til 192.168.0.100', og vi skal sørge for, at 192.168.0.100 ikke kun er tilgængelig, men faktisk MAC B og ikke MAC A. Jeg tror, ​​at ResolveIpNetEntry2 rent faktisk ville lade mig gøre det, men det er ikke tilgængeligt på Windows XP og der synes ikke at være et alternativ til dette.


Jeg er ikke sikker på, hvordan jeg ellers kan få dette punkt på tværs. Pointen er ikke, hvordan man opdager eller installerer enhederne.

Bedste reference


IP-adressen kan ændre sin tilsvarende MAC-adresse relativt ofte, fordi forskellige enheder er knyttet til et separat netværk, så jeg tror, ​​at vi skal tvinge en faktisk ARP-anmodning.


Huh?


Find MAC-adressen (fordi MAC-adressen kan filtreres)


Til hvad ender?


Jeg tror, ​​du skal tage et skridt tilbage, for lige nu tror jeg du spørger 'Jeg skal have MAC-adressen til en IP-adresse på et andet undernet' . Dette er ikke muligt.


Det lyder, at du forsøger at designe software til at administrere netværkstilsluttede enheder, og du er på udkig efter en serviceopdagelsesløsning.





Opdater efter kommentar:

Det er en software til konfiguration og opdatering af netværksbyggede automatiseringskontrollere. Mange af disse enheder vil blive knyttet til og fjernet fra en computers computer. Der kan være flere enheder med samme IP-adresse, der er knyttet til teknologien computer (den ene efter den anden, ikke på samme tid), så vi kan ikke stole på ARP-cachen for at finde ud af MAC-adressen. Enhederne vil være på samme undernet som computeren (dvs. computeren vil blive sat i enhedens 'subnet for at forbinde dem). Hvis du kender en anden metode til reliantly a) ping enheden og b) få sin MAC-adresse, jeg 'taknemmelig:)


Så din proces er to trin?



  • En mellemproces, hvor enheder er knyttet til den styrende computer, opdages og konfigureres

  • På et senere tidspunkt vil enhederne blive implementeret og knyttet til det samme undernet med den styrende computer.



Enhederne sendes forudkonfigureret med samme IP-adresse?


Hvis du er i stand til at pinge en enhed på samme undernet, skal arp cache have den rigtige mac-adresse. Men hvis scenariet betyder, at der er mulighed for at flere enheder er tilsluttet at konkurrere om samme IP-adresse, vil du få problemer.


Hvis du forventer at kunne sælge disse enheder til campusmiljøer, kan du ikke stole på, at alle enhederne er på samme undernet eller i samme undernet som controlleren. Undernet er muligvis ikke tilgængelige mellem bygninger.


Mit første forslag til designet ville være at få enhederne til at erhverve deres IP-adresser via DHCP og indeholde navn eller adresse på controlleren (e) som en DHCP-løsning. Regulatoren implementeres som en 'server'. Enhederne kunne hente deres konfigurationer fra controlleren. Enhederne kunne registrere sig hos controlleren, mens de er i drift. Mange muligheder for at introducere sikkerhed med signering af konfigurationer. Certifikat-godkendte komm.er osv. Osv.





Opdater efter opdateret spørgsmål.


Jeg er ikke sikker på, hvordan jeg ellers kan få dette punkt på tværs. Forklaringen på scenariet er en god start.


At sige at Mange af disse enheder vil blive knyttet til og fjernet fra en computers computer. er en ejendommelig måde at beskrive, hvad du har uddybet siden.


Jeg vil stoppe med at forsøge at gætte hvad du gør, og jeg vil stoppe med at forsøge at redde dig fra dig selv.


Ja, hvis du med succes kan pinge en IP-adresse på det samme undernet, skal ARP-cachen skal indeholde den aktuelle MAC-adresse for den pågældende IP-adresse. Jeg foreslår, at du tester dette for hvert operativsystem, du bruger, da der kan være vagaries om adgang til caches.

Andre referencer 1


Hvad jeg tidligere har gjort i en lignende situation var at Ping til den ønskede adresse og derefter udføre fra C # applitacion arp-kommandoen for at få den ønskede MAC.


Hver gang du skal have adgang til en MAC, opdaterer du den, der udfører denne proces.