Avatar billede marn133 Nybegynder
26. december 2004 - 10:11 Der er 11 kommentarer og
1 løsning

Ping Application i vb.net

hej eksperter...

jeg har kigget lidt rundt på nettet for at finde en kode, der kan pinge andre ip'er...

Har lavet det en gang i vb 6.0 der fandt jeg en kode som jeg lavede om til en method..

Nogen der ved hvor jeg kan finde noget kode jeg kan bruge til at pinge med.? helst i vb.net sproget..
Avatar billede erikjacobsen Ekspert
26. december 2004 - 10:29 #1
Jeg er ingen ørn til vb.net, med i C# kan du - og dermed kan du i vb.net, bare du omskriver det ... lidt ;)
http://www.c-sharpcorner.com/network/ping.asp
Avatar billede marn133 Nybegynder
26. december 2004 - 10:53 #2
hmm.. jo men for at være helt ærlig fatter jeg ikke en brik af c# :( 
Er rimelig ny inden for programmering, jeg har kun brugt vb og vb.net så derfor ville det være en KÆMPE hjælp hvis det var skrevet i vb.net...

Men tak for svaret alligevel.. :)
Avatar billede arne_v Ekspert
26. december 2004 - 13:16 #3
Grundliggende er der 3 muligheder:

1)  raw sockets i ren .NET (som Eriks C# eksempel)

2)  Win32 API kald

3)  kalde eksterne ping utility og pars output
Avatar billede arne_v Ekspert
26. december 2004 - 13:16 #4
#2 i VB.NET:

Imports System
Imports System.Net
Imports System.Runtime.InteropServices

<StructLayout(LayoutKind.Sequential,Pack:=1)> _
Public Structure ICMP_ECHO_REPLY
    Public Address As Integer
    Public Status As Integer
    Public RoundTripTime As Integer
    Public DataSize As UInt16
    Public Reserved As UInt16
    Public Data As IntPtr
    Public Options As IP_OPTION_INFORMATION
End Structure

<StructLayout(LayoutKind.Sequential,Pack:=1)> _
Public Structure IP_OPTION_INFORMATION
    Public TTL As Byte
    Public TOS As Byte
    Public Flags As Byte
    Public OptionsSize As Byte
    Public OptionsData As IntPtr
    Public RealOptionData As Integer
End Structure

Public Class Icmp
    Public Const IP_SUCCESS As Integer = 0
    Public Const IP_BUF_TOO_SMALL As Integer = 11001
    Public Const IP_REQ_TIMED_OUT As Integer = 11010

    <DllImport("icmp.dll")> _
    Public Shared Function IcmpCreateFile() As IntPtr
    End Function

    <DllImport("icmp.dll")> _
    Public Shared Function IcmpSendEcho(ByVal icmpHandle As IntPtr, ByVal ipAddr As Integer, ByRef requestData As Integer, ByVal requestSize As Short, ByVal optionInfo As IntPtr, ByRef replyBuffer As ICMP_ECHO_REPLY, ByVal replySize As Integer, ByVal timeout As Integer) As Integer
    End Function

    <DllImport("icmp.dll")> _
    Public Shared Function IcmpCloseHandle(ByVal icmpHandle As IntPtr) As Boolean
    End Function

    Public Shared Function Ping(ByVal host As String) As Boolean
        Dim addr As Integer = BitConverter.ToInt32(IPAddress.Parse(host).GetAddressBytes, 0)
        Dim h As IntPtr = IcmpCreateFile
        Dim req As Integer = 123456789
        Dim rep As ICMP_ECHO_REPLY = New ICMP_ECHO_REPLY
        Dim retval As Integer = IcmpSendEcho(h, addr, req, 4, IntPtr.Zero, rep, 32, 10)
        IcmpCloseHandle(h)
        Return (retval <> 0 AndAlso rep.Status = IP_SUCCESS)
    End Function
End Class

Public Class TestClass
    Public Shared Sub Main(ByVal args As String())
        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"))
    End Sub
End Class
Avatar billede marn133 Nybegynder
26. december 2004 - 14:54 #5
ok tak... arne v

Det er nr 2 metode jeg vil bruge, den laver dog en fejl når jeg ligger koden ind, ved du hvad det kan være..?

(46) Dim addr As Integer = BitConverter.ToInt32(IPAddress.Parse_(host).GetAddressBytes, 0)

fejl:
'GetAddressBytes' is not a member of 'System.Net.IPAddress'.
Avatar billede arne_v Ekspert
26. december 2004 - 15:18 #6
Bruger du .NET 1.0 & VS.NET 2002 ?

(det er en .NET 1.1 metode)
Avatar billede marn133 Nybegynder
26. december 2004 - 19:22 #7
ja.. jeg bruger .net 1.0 og vs.net 2002

har prøvet at opdatere til .net 1.1, ved at hente setup.exe fra denne side

http://www.microsoft.com/downloads/details.aspx?FamilyId=9B3A2CA6-3647-4070-9F41-A333C6B9181D&displaylang=en

men det hjælper ikke.. :(

hvis jeg går ind i vb.net under hjælp og finder .net versionen er den stadig 1.0...

hvad gør jeg forkert..?!
Avatar billede arne_v Ekspert
26. december 2004 - 19:24 #8
2002 bruger 1.0
2003 bruger 1.1
uanset hvad du ellers måtte have installeret

Jeg prøver lige at finde noget 1.0 kompatibelt
Avatar billede marn133 Nybegynder
26. december 2004 - 19:28 #9
nååå ok, så er jeg mere rolig...

man lærer noget hver dag.. ;)

ja det ville være dejligt hvis du gider det...
Avatar billede arne_v Ekspert
26. december 2004 - 19:34 #10
Dim addr As Integer = BitConverter.ToInt32(BitConverter.GetBytes(IPAddress.Parse(host).Address), 0)
Avatar billede marn133 Nybegynder
26. december 2004 - 20:42 #11
ok.. det hjalp..! ! 

MANGE TAK...! !

smid et "svar" for pts.
Avatar billede arne_v Ekspert
26. december 2004 - 20:46 #12
svar
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
Kurser inden for grundlæggende programmering

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