2009-08-07 87 views
4

我正在尋找一個功能,將給我我真實的IP,而不是我的本地IP。我現在的功能,返回在網絡和共享中心的IP是192.168.2.100 但是,如果我去whatismyip,那麼它會給我真正的IP。用VB.NET獲取「真實」IP地址?

我怎麼能得到這個使用VB.NET? 謝謝

回答

4

有沒有辦法只用VB.Net做到這一點。你需要找到一個能夠告訴你的網站(可能是你自己的?),或者你需要與你的路由器連接。

如果您的網站能夠運行任何類型的網頁應用程序,您可以創建一個簡單地輸出客戶端(如在連接到該頁面的計算機中)IP地址的網頁。

我有我自己的一個:

http://etoys.netortech.com/devpages/ip.asp

雖然我不能保證它永遠在那裏這就是爲什麼你應該讓你自己。

從那裏使用HttpWebRequest來下載頁面的內容很簡單。

5

結合的答案上述」 創建一個PHP文件,並粘貼在它:

<?php 
echo $_SERVER['REMOTE_ADDR']; 
?> 

保存爲curip.php並把它上傳到你的服務器

在你VB.net。項目創建一個模塊 聲明進口部分在最高層

Imports System.Net 
Imports System.IO 

並創建功能:

Public Function GetIP() As String 

    Dim uri_val As New Uri("http://yourdomain.com/curip.php") 
    Dim request As HttpWebRequest = HttpWebRequest.Create(uri_val) 

    request.Method = WebRequestMethods.Http.Get 

    Dim response As HttpWebResponse = request.GetResponse() 
    Dim reader As New StreamReader(response.GetResponseStream()) 
    Dim myIP As String = reader.ReadToEnd() 

    response.Close() 

    Return myIP 
End Function 

現在,在你的代碼的任何地方,你可以發出

Dim myIP = GetIP() 

的,你想從那裏使用的值。

+1

不熟悉php,但是您使用的腳本是否依賴於HTTP頭來檢索IP?如果是這樣,用戶可以操縱這些來指定他們想要的任何IP地址。這可能不是一個大問題,但需要考慮。 – 2009-08-14 23:42:02

+0

這是一個很好的觀點。但是,從vb.net應用程序調用php文件以來,唯一可以這樣做的方式是用戶必須使用代理服務器。 但是,應該考慮使用這種情況的特定情況。 – shaiss 2009-08-18 16:29:11

1

我可能只是在這裏crotchety,但我不禁想到你的「真正的」IP地址是由本地機器上的ifconfig(ipconfig)返回的IP地址。 192.168.2.100你的情況。無論您與遠程端點之間進行NAT轉換或隧道傳輸都無關緊要,如果這樣做,您很可能會做出一些可能使您的應用程序僅適用於當前環境的操作。

0

你不需要使用一個PHP文件只是使用一個網站,顯示你的IP像ip-adress.com,然後從那裏用網絡請求的IP,然後使用GetBetween功能。

玩得開心:)

1

我會用它響應返回你的公網IP地址公開提供的網站。

這裏的關鍵因素是:

  1. 可用性的服務。運行自己的服務可以保證對它的完全控制,以及何時可用和何時不可用。但是在某些情況下,對於這樣一個簡單的任務來說可能只是太多的工作。
  2. 最小化響應中包含的附加雜波。有很多網站允許您獲取您的公共IP地址,但他們通常以HTML頁面的形式進行操作。提取包含IP地址的頁面的小片段可能需要額外的代碼。

銘記這兩個因素我會推薦這個網址:http://wtfismyip.com/text它返回只有的IP地址以文本形式的優勢。也有版本:

挑選一個更容易爲你解析格式。

0

使用PHP它可以簡單地完成:

作爲 「shaiss」 共享PHP代碼,這是VB.net代碼:

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 
     Dim myip As HttpWebRequest = HttpWebRequest.Create("http://YourHosting.com/curip.php") 
     Dim grab As HttpWebResponse = myip.GetResponse() 
     Dim stream As Stream = grab.GetResponseStream 

     Dim SR As New StreamReader(stream) 
     TextBox1.Text = SR.ReadToEnd() 
    End Sub 
End Class 

這僅僅是一個例子:

1 - 表格

1 - 文本框

1 - 按鈕(多個)

希望這有助於!

0

我有同樣的問題,並搜索了一下,只記得我可以用WebBrowser做到這一點!

Private Sub getExtIP() Handles activeProjectsWB.DocumentCompleted 
    If gotIP = False And populateProjectCollectionBLN = True Then 
     If activeProjectsWB.ReadyState = WebBrowserReadyState.Interactive Or activeProjectsWB.ReadyState = WebBrowserReadyState.Complete Then 
      Dim unformattedExtIP As String = activeProjectsWB.Document.GetElementsByTagName("title").Item(0).OuterHtml 
      Dim onlyIPAddress As String = String.Empty 
      For Each character In unformattedExtIP 
       Dim result As Integer = 0 
       If Not (Integer.TryParse(character, result) = 0) Or character = "." Then 
        onlyIPAddress = onlyIPAddress & character 
       End If 
      Next 
      extIP = onlyIPAddress 
      gotIP = True 
     End If 
    End If 
End Sub 

當您使用WebBrowser.Navigate()導航到網頁時,僅觸發此子例程。

gotIP布爾值存在,因爲我有另一個子例程在任何文檔完成時激活。我不希望它被觸發不止一次。如果您對WebBrowser不熟悉,請檢查網頁是否已使用ReadyState加載。如果你不這樣做,你可能會得到一個異常(因爲內容沒有加載)。

您可以使用您喜歡的任何網站。這個網站是不錯的,因爲它會把你的IP地址放在標題中。這很好,因爲會有一個title標籤。如果您不能使用本網站(或其中包含您的內容的唯一標籤),請使用For Each循環。

   For Each instance As HtmlElement In activeProjectsWB.Document.GetElementsByTagName("InsertTagHere") 
        'do something to find the tag that contains your IP address 
       Next