Avatar billede soeren_dk Nybegynder
24. juni 2005 - 11:56 Der er 16 kommentarer og
1 løsning

Ping af en hostadresse

Hej.
Er der nogen som kender et namespace som kan anvendes til at "pinge" en hostadresse, samt at modtage oplysninger om svar tider mv?
Avatar billede arne_v Ekspert
24. juni 2005 - 12:00 #1
Ping er indbygget i .NET 2.0 (se min artikel om .NET og C# 2.0 for et
eksempel)
Avatar billede arne_v Ekspert
24. juni 2005 - 12:00 #2
.NET 1.1 ping kode:

using System;
using System.Net;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct ICMP_ECHO_REPLY
{
    public uint Address;
    public uint Status;
    public uint RoundTripTime;
    public ushort DataSize;
    public ushort Reserved;
    public IntPtr Data;
    public IP_OPTION_INFORMATION Options;
}

[StructLayout(LayoutKind.Sequential, Pack=1)]
public struct IP_OPTION_INFORMATION
{
    public byte TTL;
    public byte TOS;
    public byte Flags;
    public byte OptionsSize;
    public IntPtr OptionsData;
    public int RealOptionData;
}

public class Icmp
{
    public const int IP_SUCCESS = 0;
    public const int IP_BUF_TOO_SMALL = 11001;
    public const int IP_REQ_TIMED_OUT = 11010;
    [DllImport("icmp.dll")]
    public static extern IntPtr IcmpCreateFile();
    [DllImport("icmp.dll")]
    public static extern uint IcmpSendEcho(IntPtr icmpHandle, uint ipAddr, ref int requestData, ushort requestSize, IntPtr optionInfo, ref ICMP_ECHO_REPLY replyBuffer, uint replySize, int timeout);
    [DllImport("icmp.dll")]
    public static extern bool IcmpCloseHandle(IntPtr icmpHandle);
    public static bool Ping(string host)
    {
        uint addr = BitConverter.ToUInt32(IPAddress.Parse(host).GetAddressBytes(), 0);
        IntPtr h = IcmpCreateFile();
        int req = 123456789;
        ICMP_ECHO_REPLY rep = new ICMP_ECHO_REPLY();
        uint retval = IcmpSendEcho(h, addr, ref req, 4, IntPtr.Zero, ref rep, 32, 10);
        IcmpCloseHandle(h);
        return (retval != 0 && rep.Status == IP_SUCCESS);
    }
}

public class TestClass
{
    public static void Main(string[] args)
    {
        Console.WriteLine("min server : " + Icmp.Ping("192.168.1.10"));
        Console.WriteLine("ikke eksisterende : " + Icmp.Ping("192.168.1.25"));
        Console.WriteLine("www.google.dk (svarer) : " + Icmp.Ping("216.239.59.104"));
        Console.WriteLine("www.eksperten.dk (svarer ikke) : " + Icmp.Ping("62.199.138.148"));
    }
}
Avatar billede arne_v Ekspert
24. juni 2005 - 12:01 #3
rep.RoundTripTime indeholder svartiden
Avatar billede soeren_dk Nybegynder
24. juni 2005 - 14:25 #4
Hej Arne,
Det kalder man da for et svar :-)
Det er vist lige det jeg søgte - så der er points på vej til dig. Jeg er ikke en haj til dette sted, så dukker de ikke op så giv mig lige et ping

Ps. Hvor finder jeg den omtalte artikel, da jeg absolut gerne vil læse denne.
Avatar billede arne_v Ekspert
24. juni 2005 - 14:41 #5
jeg ligger et svar så
Avatar billede arne_v Ekspert
24. juni 2005 - 14:42 #6
Avatar billede soeren_dk Nybegynder
25. juni 2005 - 08:07 #7
Hej Arne (håber du ser dette).
Først og fremmest tak for din hjælp igår. Men jeg er rendt ind i et lille ekstra problem som jeg er sikker på du kan svare på -der er selvfølge et slat point at hente ;-)

Når jeg kører din kode (kompileret som en konsol app) funker det kun hvis jeg angiver ip-adressen. Hvordan får man lige den automatisk - altså hvis man angiver www.google.com, så skal den pinges som 216.239.39.99 for at funke (siger min test af koden mig). Hvordan fikser man lige det? Please...
Avatar billede soeren_dk Nybegynder
25. juni 2005 - 08:26 #8
Lige en ekstra kommentar, så kunne det osse være rart hvis man kunne gå den anden vej, altså fra ip til hostnavn.

God weekend,
Søren
Avatar billede arne_v Ekspert
25. juni 2005 - 08:28 #9
prøv:

Dns.GetHostByName("www.google.com").AddressList[0].ToString()
Avatar billede arne_v Ekspert
25. juni 2005 - 08:30 #10
Dns.GetHostByAddress("192.168.1.10").HostName
Avatar billede arne_v Ekspert
25. juni 2005 - 08:31 #11
men husk:

1 navn kan pege på flere numre

1 nummer behøver ikke at have et navn tilknyttet
Avatar billede soeren_dk Nybegynder
25. juni 2005 - 09:09 #12
Takker igen :-)
Jeg har accepteret dit svar - får du så automatisk dine fortjente points?

Søren
Avatar billede arne_v Ekspert
25. juni 2005 - 09:17 #13
alt ok
Avatar billede soeren_dk Nybegynder
25. juni 2005 - 10:18 #14
Hej Arne,
Jeg fik ikke umiddelbart: Dns.GetHostByAddress("216.239.39.99").HostName til at virke - fik en debugger fejl under kørelsen. Prøvede at tilføje en toString, men uden resultat.

Alt er er denne del luksus - det vigtige for mig er at få ip-adressen :-)
Avatar billede arne_v Ekspert
25. juni 2005 - 10:34 #15
jeg får også fejl på den, men jeg tror ikke at det er kodens skyld - jeg tror
bare at det er fordi den navne server du bruger ikke kender Googles domain og
derfor ikke kan lave oversættelsen
Avatar billede soeren_dk Nybegynder
25. juni 2005 - 11:36 #16
ok. Som sagt din hjælp har løst problemet, så det er super... Skal domænet være kendt af google også for at opløse hostnavnet til ip?

Søren
Avatar billede arne_v Ekspert
25. juni 2005 - 12:51 #17
nej

navn->nummer vil blive viderestillet til den rigtige navneserver
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