Avatar billede Mentor Juniormester
21. september 2012 - 17:42 Der er 9 kommentarer og
1 løsning

Standardgateway i console

Hej eksperter.

Kan jeg få mit console-program i C# til at hente standardgateway-adressen fra den computer, programmet køres i, og sætte det ind i en sætning der minder om det her:

Console.Write("Ping {0} (dette er din standardgateway-adresse)", ***gateway-kommando***);

På forhånd tak.
Avatar billede tjens Nybegynder
21. september 2012 - 18:36 #1
...
using System.Net.NetworkInformation;

namespace ConsoleApplication_Get_IP_Gateway
{
    class Program
    {
        static void Main(string[] args)
        {
            foreach (NetworkInterface f in NetworkInterface.GetAllNetworkInterfaces())
            {
                IPInterfaceProperties ipInterface = f.GetIPProperties();
                foreach (var GateWayAddress in ipInterface.GatewayAddresses) {
                    Console.WriteLine(f.Name);
                    Console.WriteLine(GateWayAddress.Address == null ?
                        "No gateway defined" :
                        " - Gateway: " + GateWayAddress.Address.ToString());
                }
            }
            Console.ReadKey();
        }
    }
}
Avatar billede Mentor Juniormester
21. september 2012 - 18:45 #2
Og hvordan får jeg så arbejdet den ind i ovenstående "Console.Write"?

Hvis jeg sætter denne tekst ind i et tomt program melder den desuden fejl på NetworkInterface nr. 2.
Avatar billede Mentor Juniormester
21. september 2012 - 19:45 #3
Jeg skriver i C# 2010 express. Det skulle vist gøre en forskel, for jeg har prøvet en masse koder, jeg har fundet på nettet, men ingen virker, og de er tilsyneladende heller ikke skrevet i 2010.
Avatar billede tjens Nybegynder
21. september 2012 - 21:34 #4
Jeg har skrevet eksemplet i 2010 Professional, så det burde virke.

Namespace bliver selvfølgelig noget andet i dig projekt: Behold dit eget navn der.

1. Lav et nyt console application projekt

2. Indsæt
            foreach (NetworkInterface f in NetworkInterface.GetAllNetworkInterfaces())
            {
                IPInterfaceProperties ipInterface = f.GetIPProperties();
                foreach (var GateWayAddress in ipInterface.GatewayAddresses) {
                    Console.WriteLine(f.Name);
                    Console.WriteLine(GateWayAddress.Address == null ?
                        "No gateway defined" :
                        " - Gateway: " + GateWayAddress.Address.ToString());
                }
            }
            Console.ReadKey();
i din tomme Main metode.

3. Højreklik på den rødt understregede NetworkInterface og vælg Resolve, og vælg den øverste mulighed.
Avatar billede Mentor Juniormester
21. september 2012 - 22:07 #5
Kan godt se det nu... Men jeg er altså rimelig newbie, så hvis du kunne hjælpe med følgende, ville jeg sgu blive glad. Jeg vil bare gerne have skrevet "Din gateway er: 192.168.1.1".

Den måde din version kommer frem på er med en masse ekstra. Hvordan fjerner jeg dette?

Altså en Console.Write("Din gateway er: {0}", gateway);

Håber du forstår mig :-)
Avatar billede Mentor Juniormester
21. september 2012 - 22:22 #6
Jeg har fået justeret lidt i det, så jeg nu får udskrevet:

Ping Default Gateway: 192.168.1.1
Ping Default Gateway: ::

Kan man fjerne linje nr. 2 vil det være helt perfekt! :-D
Avatar billede Mentor Juniormester
21. september 2012 - 22:40 #7
Jeg tænker nu lidt, at det må være fordi jeg har flere netværkskort i computeren. Dumme mig.

Jeg siger mange tak for svarene :-)
Avatar billede Mentor Juniormester
21. september 2012 - 22:43 #8
Eller tja... Der var jeg nok for hurtigt.

Hvis jeg sætter kabel til også siger den så bare:

Ping Default Gateway: 192.168.1.1
Ping Default Gateway: 192.168.1.1
Ping Default Gateway: ::
Avatar billede tjens Nybegynder
22. september 2012 - 09:20 #9
Her er en rutine, der tester om hvert enkelt netværksinterface er aktivt, og vælger den første brugbare Gateway:
        static void Main(string[] args)
        {
            String GateWay = "Message: No Gateway address found";
            foreach (NetworkInterface f in NetworkInterface.GetAllNetworkInterfaces())
            {
                IPInterfaceProperties ipInterface = f.GetIPProperties();
                if (    f.OperationalStatus == OperationalStatus.Up &&
                        ipInterface.IsDynamicDnsEnabled == true)
                {
                    if ( RetrieveGateway( ref ipInterface,  ref GateWay ) ) {
                        break;
                    }
                }
            }
            Console.Write("Din gateway er: {0}", GateWay);
            Console.ReadKey();
        }

        private static bool RetrieveGateway( ref IPInterfaceProperties ipInterface, ref String GateWay)
        {
            foreach (var GateWayAddress in ipInterface.GatewayAddresses)
            {
                if ( GateWayAddress.Address != null )
                {
                    GateWay =  GateWayAddress.Address.ToString();
                    return true;
                }
            }
            return false;
        }


Ovenstående skal erstatte Main metoden i et nyt console-projekt.
Avatar billede Mentor Juniormester
22. september 2012 - 10:16 #10
Smukt! Det tog lige lidt tid at få arbejdet den ind i en større sag, men det lykkedes :-)

Tak for hjælpen, tjens.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester