Gå til innhold

Anbefalte innlegg

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

Lenke til kommentar
Videoannonse
Annonse
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.

Lenke til kommentar

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.");
		}
	}
}
}

Lenke til kommentar

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.

Lenke til kommentar
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.

Lenke til kommentar
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.

Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...