Unikeko Skrevet 16. august 2008 Skrevet 16. august 2008 Hei Har bruk for en liten console app, men med min heller begrensede programmerings kunnskap håper jeg noen andre her kunne hjelpe meg litt Det jeg trenger er en console app rett og slett viser IP adressen til den tilkoblingen jeg skriver. Eksempel i cmd: c:\> getip "local area connection 1" 192.168.0.1 Har funnet noen slike på nettet, men alle skriver mye mere ( Your IP etc) mens jeg trenger kun IP da jeg skal bruke "output" til noe annet. Håper noen kan hjelpe meg litt med dette Fint om du/dere tar med koden også så jeg kan lære litt. Uni
GeirGrusom Skrevet 16. august 2008 Skrevet 16. august 2008 Du kan bruke ipconfig for å få vite dette. Hvis du derimot kun er interessert i å vite IP addressen, kan det enkleste være å lese input fra ipconfig og bruke regex for å kun hente ut IP addressen.
Unikeko Skrevet 16. august 2008 Forfatter Skrevet 16. august 2008 Du kan bruke ipconfig for å få vite dette. Hvis du derimot kun er interessert i å vite IP addressen, kan det enkleste være å lese input fra ipconfig og bruke regex for å kun hente ut IP addressen. Trenger bare IP ja. ipconfig gir mye mer en jeg trenger, og regex har jeg egentlig ingen peiling på... Håpte noen ville være hyggelig å lage et slikt program for meg grunnen til at jeg trenger det akkurat slik er at det skal brukes i et lite script jeg lager som skal vise IP til en spesifikk tilkobling.
BlueEAGLE Skrevet 16. august 2008 Skrevet 16. august 2008 Dette finner vi lett i navneområdet System.Net.NetworkInformation. Det gjelder bare å vite hvor og hvordan man skal lete. Kort fortalt så må du: A) Hente alle nettverksenhetene B) Sammenlikne enhetsnavnet (NetworkInterface.Name) med den enheten du er interessert i. C) Hente IP-eiendelene til enheten D) Hente samlingen med unicast-adresser til enheten (det er unicast vi normalt kaller IP-adressen) E) Skrive ut adressen(e). Husk at en enhet kan ha flere adresser. kodemessig så blir det seende ca. slik ut: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Net.NetworkInformation; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { bool treff = false; //Først sjekker vi om vi har fått sendt parametere. if (args.Length >= 1) { //Så henter vi alle adapterene NetworkInterface[] adaptere = NetworkInterface.GetAllNetworkInterfaces(); foreach (NetworkInterface adapter in adaptere) { //Vi sjekker om dette adapteret er det vi er ute etter if (adapter.Name == args[0]) { //Vi setter flagget slik at vi vet at vi traff enheten treff = true; //Vi trenger egenskapene til ip-enheten. IPInterfaceProperties ip_prop = adapter.GetIPProperties(); //Det er unicast adressen(e) vi er interessert i UnicastIPAddressInformationCollection uniCast = ip_prop.UnicastAddresses; foreach (UnicastIPAddressInformation uni in uniCast) { //og skriver dem ut til konsollen. Console.WriteLine(uni.Address); } } } if (treff == false) { Console.WriteLine("Fant ikke enheten '{0}'", args[0]); } } else { Console.WriteLine("Du må spesifisere en enhet."); } } } }
Unikeko Skrevet 16. august 2008 Forfatter Skrevet 16. august 2008 Takk! akkurat det jeg trengte. Du har vert til stor hjelp.
BlueEAGLE Skrevet 16. august 2008 Skrevet 16. august 2008 Takk! akkurat det jeg trengte. Du har vert til stor hjelp. Leste du igjennom koden før du kompilerte og kjørte den?
Unikeko Skrevet 16. august 2008 Forfatter Skrevet 16. august 2008 Takk! akkurat det jeg trengte. Du har vert til stor hjelp. Leste du igjennom koden før du kompilerte og kjørte den? Har sett litt på det. Skal studere mer litt senere i kveld.
Manfred Skrevet 16. august 2008 Skrevet 16. august 2008 Jeg har ikke helt skjønt hvorfor endel gjør dette: UnicastIPAddressInformationCollection uniCast = ip_prop.UnicastAddresses; foreach (UnicastIPAddressInformation uni in uniCast) ... I stedet for bare dette: foreach (UnicastIPAddressInformation uni in ip_prop.UnicastAddresses) Når du ikke skal bruke den senere, utenfor scopet, er det jo ikke noe poeng å ha to klin like instanser.
BlueEAGLE Skrevet 16. august 2008 Skrevet 16. august 2008 Jeg har ikke helt skjønt hvorfor endel gjør dette: UnicastIPAddressInformationCollection uniCast = ip_prop.UnicastAddresses; foreach (UnicastIPAddressInformation uni in uniCast) ... I stedet for bare dette: foreach (UnicastIPAddressInformation uni in ip_prop.UnicastAddresses) Når du ikke skal bruke den senere, utenfor scopet, er det jo ikke noe poeng å ha to klin like instanser. Det kalles skoleeksempel. Man viser hvilken type de forskjellige tingene har slik at de som leser koden kan lese mer om disse typene i dokumentasjonen.
Glenn F. Henriksen Skrevet 18. august 2008 Skrevet 18. august 2008 Jeg har ikke helt skjønt hvorfor endel gjør dette: UnicastIPAddressInformationCollection uniCast = ip_prop.UnicastAddresses;<BR>foreach (UnicastIPAddressInformation uni in uniCast)... I stedet for bare dette: foreach (UnicastIPAddressInformation uni in ip_prop.UnicastAddresses) Når du ikke skal bruke den senere, utenfor scopet, er det jo ikke noe poeng å ha to klin like instanser. Det er ingen praktisk forskjell etter kompilering. Hvis du ikke bruker den variabelen utenfor fornext løkken vil kompilatoren optimalisere den vekk. De to måtene produserer altså identisk IL tilsvarende det andre eksempelet ditt. Det er igrunnen et spørsmål som stil og personlige preferanser.
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå