質問
ローカルIPではなく実際のIPを提供する関数を探しています。私が現在持っている関数は、192.168.2.100のネットワークおよび共有センターのIPを返しますが、whatismyipに行くと実際のIPが得られます。
VB.NET を使用してこれを取得するにはどうすればよいですか?ありがとう
解決
ちょうどVB.Netでこれを行う方法はありません。あなたは(?あなた自身の、おそらく1)を教えてくれるウェブサイトを見つける必要があるか、あなたのルータとのインターフェイスにする必要があります。
あなたは、Webページのアプリケーションの任意の並べ替えを実行することのできるウェブサイトを持っている場合は、あなたは単にクライアントのIPアドレス(ページに接続しているコンピュータのように)を出力Webページを作成することができます。
私は自分のものを持っています:
http://etoys.netortech.com/devpages/ip.aspする
私はそれは常にあなたがあなた自身の作るべき理由であるがあるでしょう保証することはできませんけど。
そこからダウンロードするには HttpWebRequestのに使用しただけの簡単な作業ですページのコンテンツます。
他のヒント
上記の回答を組み合わせるために」 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()
あなたが望むように、そこから値を使用してます。
私はおそらくちょうどここ奇態なことだけど、私は助けるが、あなたの「本当の」IPアドレスはローカルマシン上でifconfigコマンド(IPCONFIG)によって返されたものであると考えることはできません。あなたのケースでは192.168.2.100。どのようなNAT変換またはトンネリングあなたとは関係ないはずリモートエンドポイントの間に行き、それがない場合、あなたはあなたのアプリケーションは、あなたの現在の環境で動作させる可能性が何かをやっているの良いチャンスがあります。
私なら、応答としてパブリック IP アドレスを返す、公開されているサイトを使用します。
ここでの重要な要素は次のとおりです。
- サービスの可用性。独自のサービスを実行すると、そのサービスを完全に制御できるようになり、いつ利用可能か、いつ利用できないかを把握できるようになります。しかし、場合によっては、このような単純なタスクには多大な労力がかかる可能性があります。
- 応答に含まれる追加の乱雑さを最小限に抑えます。パブリック IP アドレスを取得できるサイトはたくさんありますが、多くの場合、HTML ページの形式で取得されます。IP アドレスを含むページの小さなフラグメントを抽出するには、追加のコードが必要になる場合があります。
これら 2 つの要素を念頭に置いて、この URL をお勧めします。 http://wtfismyip.com/text 返せるメリットがある のみ テキスト形式の IP アドレス。次のバージョンもあります。
解析しやすい形式を選択してください。
PHPファイルを使用する必要はありません。ip-adress.comのようなIPを表示するサイトを使用し、そこからwebrequestでIPを取得して使用します。 ゲットビトゥイーン 関数。
楽しむ :)
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 - ボタン(S)
この情報がお役に立てば幸い!
私は、同じ質問を持っていたし、私はWebブラウザーでこれを行うことができますことを覚えておくことは少しだけを検索!
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()
を使用してWebページに移動したときにこのサブルーチンにのみトリガされます。
私は、任意のドキュメント完了時にアクティブに別のサブルーチンを持っているので、 gotIP
ブールが存在します。私はそれが複数回トリガーされないようにします。あなたはWebBrowser
に慣れていない場合は、WebページがReadyState
と十分にロードされている確認してください。そうしないと(内容がロードされていないので)、あなたが例外を取得することがあります。
あなたが好きな方、サイトを使用することができます。それはタイトルにあなたのIPアドレスを置くので、このサイトは良いです。 1個の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