2017-01-13 3 views
-2

Мое программное обеспечение сохраняет информацию тремя различными способами в зависимости от типа подключения к базе данных (1-Local/2-Network/3-Internet).Определение глобального IP-адреса в той же сети vb.net, C#

Я могу узнать тип подключения к базе данных в зависимости от имени сервера из строки подключения.

Первая проблема, которая была решена, заключается в том, что клиент набирает глобальный адрес вместо ввода Localhost на серверной машине.

Я использовал эту функцию, чтобы проверить, если адрес принадлежит к той же машине или нет:

Public Function IsLocalIpAddress(host As String) As Boolean 
    Try 
     ' get host IP addresses 
     Dim hostIPs As Net.IPAddress() = Net.Dns.GetHostAddresses(host) 
     ' get local IP addresses 
     Dim localIPs As Net.IPAddress() = Net.Dns.GetHostAddresses(Net.Dns.GetHostName()) 
     ' test if any host IP equals to any local IP or to localhost 
     For Each hostIP As Net.IPAddress In hostIPs 
      ' is localhost 
      If Net.IPAddress.IsLoopback(hostIP) Then 
       Return True 
      End If 
      ' is local address 
      For Each localIP As Net.IPAddress In localIPs 
       If hostIP.Equals(localIP) Then 
        Return True 
       End If 
      Next 
     Next 
    Catch 
    End Try 
    Return False 
End Function 

Но когда он печатает глобальный IP-с другого компьютера в той же сети, программное обеспечение распознает подключение как (Интернет), not (Network)

Так что мне нужно что-то сказать мне, что этот глобальный ip находится в той же сети, чтобы мое программное обеспечение правильно справилось с этим подключением.

ответ

0

Я сделал несколько трюков, может быть, это решает мой вопрос временный

1- Первый Trick

Ping Глобальный IP-адрес, если RoundtripTime менее 2 миллисекунды она должна быть в той же сети (я тестировал наиболее известные сайты по моей линии передачи данных, и все они выше 20)

Dim ping1 As New System.Net.NetworkInformation.Ping() 
      Try 
       Dim PingReply1 As System.Net.NetworkInformation.PingReply = ping1.Send(GetFormCs(SrcMCS, CsDataEnum.Server)) 
       If PingReply1.Status = Net.NetworkInformation.IPStatus.Success Then 
        If PingReply1.RoundtripTime() <= 2 Then 
         dbHost = Hst.Network 
         ForcedToNetwork = True 
        End If 
       End If 
       PingReply1 = Nothing 
      Catch ex As Exception 
      End Try 
      ping1 = Nothing 

2- Второй Trick

я проверить DSN IP для соединение ... если оно равно серверу Global IP, это означает, что соединение находится в той же сети

Dim webCL As New System.Net.WebClient 
    Dim PublicIP As String = "" 
    Try 
     Dim foo As New Xml.XmlDocument 
     foo.LoadXml(System.Text.Encoding.ASCII.GetString((webCL.DownloadData("http://checkip.dyndns.org/")))) 
     Dim curNode As Xml.XmlNode = foo.DocumentElement.FirstChild 
     curNode = curNode.NextSibling 
     response = curNode.InnerText.Remove(0, curNode.InnerText.IndexOf(":") + 1) 
    Catch ex As Exception 
     PublicIP = "ERROR" 
    End Try 
     If PublicIP = Database_Sever_IP Then 
      If dbHost = Hst.Internet Then 
       dbHost = Hst.Network 
       ForcedToNetwork = True 
      End If 
     End If 

 Смежные вопросы

  • Нет связанных вопросов^_^