none
Erreichbarkeit eines Serves prüfen RRS feed

  • Frage

  • Hallo,

    darf ich nochmal mein altes Thema unter

    https://social.msdn.microsoft.com/Forums/de-DE/be9d7475-ce07-4f96-8f50-0b4f10b08479/erreichbarkeit-eines-serves-prfen?forum=visualbasicde#6745d167-cd44-40d5-9ecc-96de24098681

    aufwärmen? Es ging darum, zu testen, ob ein bestimmter Server erreichbar ist. Mit dem Code von Florian schien alles perfekt gelöst.

        Private Function GetResponse() As Boolean
            Dim err As Boolean = False
            Dim client As WebClient = New WebClient()
            ServicePointManager.ServerCertificateValidationCallback = Function(se As Object,
                                                                               cert As System.Security.Cryptography.X509Certificates.X509Certificate,
                                                                               chain As System.Security.Cryptography.X509Certificates.X509Chain,
                                                                               sslerror As System.Net.Security.SslPolicyErrors) True
            Try
                ServicePointManager.ServerCertificateValidationCallback = New Net.Security.RemoteCertificateValidationCallback(Function() True)
                Dim data = client.DownloadData("https://kvlink1.kv-safenet.de:8443/kvcserver/rest/server/version")
            Catch ex As Exception
                err = True
            Finally
                client.Dispose()
            End Try
            ServicePointManager.ServerCertificateValidationCallback = Nothing
    
            If Not err Then
                pi.IconChange(My.Resources.armin1)
                Thread.Sleep(180000)
            End If
            pi.IconChange(My.Resources.armin2)
            GetResponse()
        End Function

    Jetzt weigert sich ein WIN 7 Rechner bei einem User hartnäckig, zu funktionieren. Im Firefox gibt der Server

    https://kvlink1.kv-safenet.de:8443/kvcserver/rest/server/version

    problemlos die Versionsnummer zurück. Mit meinem Tool erhalte ich keine Daten. Bevor ich mir die Mühe mache, den Code umzuschreiben und Messageboxen einzubauen, wollte ich euch fragen, ob ihr vielleicht eine Idee habt, woran das liegen könnte.

    Viele Grüße Norbert


    Montag, 2. Juli 2018 12:47

Antworten

  • Hi,

    ich denke, dass die SSL/TLS Einstellungen auf dem Client nicht passen. Der Server verlangt wohl eine neuere TLS Version (bspw. TLS 1.1 oder 1.2), die Anwendung arbeitet aber auf dem betreffenden System mit einer niedrigeren Version (bspw. SSL 3).

    Probier mal, die Angaben in deiner Anwendung entsprechend anzupassen.

    ServicePointManager.SecurityProtocol =  SecurityProtocolType.Tls11
    
    oder
    
    ServicePointManager.SecurityProtocol =  SecurityProtocolType.Tls12
    

    Es kann aber sein, dass auf dem Client noch ein Patch installiert werden muss, damit das funktioniert.

      Support for TLS System Default Versions included in the .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert norbert3 Dienstag, 3. Juli 2018 16:46
    Dienstag, 3. Juli 2018 07:35
    Moderator

Alle Antworten

  • Vielleicht doch besser der ganze Code?

    Imports System.Threading
    Imports System.Net
    
    Public Class PingApplication
        Inherits ApplicationContext
    
        Private pi As ProcessIcon
    
        Public Sub New()
            pi = New ProcessIcon()
            pi.Display(My.Resources.armin2)
            CheckConnection()
        End Sub
    
        Private Sub CheckConnection()
            Dim t As Thread = New Thread(AddressOf GetResponse)
            t.IsBackground = True
            t.Start()
        End Sub
    
        Private Function GetResponse() As Boolean
            Dim err As Boolean = False
            Dim client As WebClient = New WebClient()
            ServicePointManager.ServerCertificateValidationCallback = Function(se As Object,
                                                                               cert As System.Security.Cryptography.X509Certificates.X509Certificate,
                                                                               chain As System.Security.Cryptography.X509Certificates.X509Chain,
                                                                               sslerror As System.Net.Security.SslPolicyErrors) True
            Try
                ServicePointManager.ServerCertificateValidationCallback = New Security.RemoteCertificateValidationCallback(Function() True)
                Dim data = client.DownloadData("https://kvlink1.kv-safenet.de:8443/kvcserver/rest/server/version")
            Catch ex As Exception
                err = True
            Finally
                client.Dispose()
            End Try
            ServicePointManager.ServerCertificateValidationCallback = Nothing
    
            If Not err Then
                pi.IconChange(My.Resources.armin1)
                Thread.Sleep(180000)
            End If
            pi.IconChange(My.Resources.armin2)
            GetResponse()
        End Function
    
        Protected Overrides Sub Dispose(disposing As Boolean)
            If disposing Then
                If pi IsNot Nothing Then
                    pi.Dispose()
                End If
            End If
            MyBase.Dispose(disposing)
        End Sub
    
    End Class
    

    Montag, 2. Juli 2018 12:55
  • Hallo Norbert,

    ich tippe mal auf einen Proxy, der im Firefox aber nicht im System eingestellt ist.

    Aber mal so gesagt: Was willst Du mit irgendwelchen Messageboxen? Ignorier einfach nicht sämtliche Fehlerdetails, setz einen Breakpoint auf die Zeile "err = True" und schau dir an, was in ex.ToString() steht.

    Alternativ (wenn Du auf dem Rechner nicht debuggen kannst), schreib einfach ein Log, wenn ein Fehler auftritt.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Montag, 2. Juli 2018 13:06
    Moderator
  • Danke!!! Superschnell! Gleich nachgeschaut:

    Auf meinen Rechnern: kein Proxy

    Beim User: "Proxy Einstellungen des Systems verwenden"

    Was muss ich da tun?

    Montag, 2. Juli 2018 13:16
  • Hallo Norbert,

    wenn der systemseitig eingestellt Proxy verwendet wird, sollte das eigentlich dann in deiner .NET Anwendung auch klappen, es sei denn, die Proxyeinstellungen wurden dort überschrieben.

    Da das nicht klappt, probier mal das hier in deine app.config einzutragen:

    <configuration>
        ...
        <system.net>
            <defaultProxy>
                <proxy
                    usesystemdefault="True"
                    proxyaddress="http://1.2.3.4:8080"
                    bypassonlocal="True" />
            </defaultProxy>
        </system.net>
        ...
    </configuration>


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


    Montag, 2. Juli 2018 13:26
    Moderator
  • Danke! Um sowas zu begreifen, muss ich wohl 150 Jahre alt werden ;-)

    Tatsächlich 1.2.3.4:8080 eintragen? Oder die echte IP für den Server?

    Montag, 2. Juli 2018 13:30
  • Hallo Norbert,

    natürlich die echte IP bzw. den Servernamen (und natürlich auch den richtigen Port) des Proxies.

    Du kannst proxyaddress auch erstmal weglassen und ggfs. noch autoDetect="True" hinzufügen. Wenn das dann immer noch nicht klappt, proxyaddress nochmal hinzufügen und autoDetect wegnehmen.

    Wenn das dann immer noch nicht geht, poste bitte die exakte und vollständige Fehlermeldung, die Du erhältst.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET
    http://www.asp-solutions.de/ - Consulting, Development
    http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community

    Montag, 2. Juli 2018 13:39
    Moderator
  • autoDetect funktioniert. Zumindest auf meinen Rechnern. Muss nun diese Version zum Problem-User befördern und testen. Wird erst abends ...

    Vielen Dank für Deine Hilfe!

    Montag, 2. Juli 2018 14:28
  • Guten Morgen,

    beim Problem-User geht es nicht mit autoDetect. Es kommt die Exception


    Die war bestimmt auch schon vorher da, ich hatte aber keine Messagebox drin und konnte sie nicht sehen. Sollte ich jetzt proxyaddress versuchen? Oder kannst Du an der Fehlermeldung erkennen, ob es vielleicht in eine andere Richtung geht?

    Dienstag, 3. Juli 2018 06:34
  • Hallo,

    mir fallen da zwei Möglichkeiten ein.

    • In der app.config den Eintrag für den Default Proxy ergänzen:
    <system.net>
      <defaultProxy useDefaultCredentials="true" />
    </system.net>
    • im Code:
    webClient.UseDefaultCredentials = true;
    webClient.Proxy = WebRequest.GetSystemWebProxy();

    Sollte beides funktionieren, sonst bleibt natürlich immer noch die Abfrage des Proxy beim Benutzer, bzw. diesen wie bereits erwähnt in der App.config zu hinterlegen und nur die Credentials (Nutzer/Passwort) abzufragen.

    • Bearbeitet Florian Haupt Dienstag, 3. Juli 2018 06:55 Formatierung nach senden kaputt
    Dienstag, 3. Juli 2018 06:51
  • Hi,

    ich denke, dass die SSL/TLS Einstellungen auf dem Client nicht passen. Der Server verlangt wohl eine neuere TLS Version (bspw. TLS 1.1 oder 1.2), die Anwendung arbeitet aber auf dem betreffenden System mit einer niedrigeren Version (bspw. SSL 3).

    Probier mal, die Angaben in deiner Anwendung entsprechend anzupassen.

    ServicePointManager.SecurityProtocol =  SecurityProtocolType.Tls11
    
    oder
    
    ServicePointManager.SecurityProtocol =  SecurityProtocolType.Tls12
    

    Es kann aber sein, dass auf dem Client noch ein Patch installiert werden muss, damit das funktioniert.

      Support for TLS System Default Versions included in the .NET Framework 3.5.1 on Windows 7 SP1 and Server 2008 R2 SP1


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    • Als Antwort markiert norbert3 Dienstag, 3. Juli 2018 16:46
    Dienstag, 3. Juli 2018 07:35
    Moderator
  • Ihr seid wie immer umwerfend! Danke!

    Kann erst wieder heute Abend an den betreffenden Rechner ...

    Dienstag, 3. Juli 2018 10:20
  • Hier die App.config nach Florian:

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    	<startup>
    	<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7"/></startup>
      <system.net>
        <defaultProxy useDefaultCredentials="true" />
      </system.net>
    </configuration>

    Und hier die Exception:

    Ich probier jetzt den Vorschlag von Stefan ...

    Dienstag, 3. Juli 2018 15:40
  • Oh, da tun sich gleich ein paar Fragen auf. Wie muss die App.config jetzt aussehen? Und wohin im Code mit dem
    ServicePointManager.SecurityProtocol

    Dienstag, 3. Juli 2018 15:43
  • Hallo Norbert,

    die Zeile mit ServicePointManager.SecurityProtocol kommt dorthin, wo auch deine andere Zeile mit ServicePointManager.ServerCertificateValidationCallback steht. Dachte, das wär klar, daher hatte ich das nicht extra nochmal erwähnt^^


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 3. Juli 2018 16:22
    Moderator
  • Das funktioniert leider nicht

            Dim err As Boolean = False
            Dim client As WebClient = New WebClient()
            client.UseDefaultCredentials = True
            client.Proxy = WebRequest.GetSystemWebProxy
            ServicePointManager.ServerCertificateValidationCallback = Function(se As Object,
                                                                               cert As System.Security.Cryptography.X509Certificates.X509Certificate,
                                                                               chain As System.Security.Cryptography.X509Certificates.X509Chain,
                                                                               sslerror As System.Net.Security.SslPolicyErrors) True
            Try
                ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls11
                ServicePointManager.ServerCertificateValidationCallback = New Security.RemoteCertificateValidationCallback(Function() True)
                Dim data = client.DownloadData("https://kvlink1.kv-safenet.de:8443/kvcserver/rest/server/version")
            Catch ex As Exception
                err = True
                MessageBox.Show(ex.ToString)
            Finally
                client.Dispose()
            End Try

    Mit Tls12 geht es auf meinem Rechner. Schiebe es jetzt zum User ...

    Dienstag, 3. Juli 2018 16:29
  • Hallo Norbert,

    was heißt "geht nicht"? Kommt dann auch der Fehler wie oben mit dem SSL/TLS Kanal?

    Falls ja, arbeitet die Gegenstelle nur noch mit TLS 1.2 und evtl. höher. In dem Fall kann es aber wie bereits geschrieben sein, dass Du ein Windows Update auf dem Windows 7 Rechner installieren musst, damit TLS 1.2 überhaupt unterstützt wird.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 3. Juli 2018 16:36
    Moderator
  • Und was muss ich sagen: Es funktioniert!!!

    Ich bin vor Freude fast auf den Tisch gesprungen. Unglaublich, wie Du das machst Stefan. Solch Durchblick werde ich wohl niemals bekommen. Ein Glück, dass ich dieses Forum habe ...

    Viele ganz herzliche Grüße

    Norbert

    Dienstag, 3. Juli 2018 16:36
  • Dein Beitrag hat sich mit meinem überschnitten. Der WIN 7 Rechner wird eigentlich regelmäßig geupdated. Das schärfe ich meinen Anwendern immer wieder ein. Aber ich kontrolliere es gleich nochmal.

    Dienstag, 3. Juli 2018 16:39
  • Hallo Norbert,

    prima, das freut uns, dass es nun klappt.

    Und denk dran: Nur auf Tische springen, die das auch aushalten :)


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 3. Juli 2018 16:39
    Moderator
  • Hallo Norbert,

    Der WIN 7 Rechner wird eigentlich regelmäßig geupdated.

    dieses Update war unter Umständen nur als optionales Update vorhanden, daher gibt es schon einige Rechner, die das nicht drauf haben.


    Gruß, Stefan
    Microsoft MVP - Visual Developer ASP/ASP.NET (2001-2018)
    https://www.asp-solutions.de/ - IT Beratung, Softwareentwicklung, Remotesupport

    Dienstag, 3. Juli 2018 16:43
    Moderator
  • Danke. Suche gerade, wie ich den Thread als Erledigt kennzeichnen kann. Finde es nicht.
    Dienstag, 3. Juli 2018 16:45
  • Habs gefunden.
    Dienstag, 3. Juli 2018 16:46