質問

いの 外部 IPのコンピュータにC#アプリケーションを起動します。

を用いて接続などがあります。純リモ)は、サーバーです。いい方法はありませんかを保持するビズキーを全て取得しクライアントのサーバ側では?

してくれてありがとうございますの編集という問いを持って、ちょっときれいな色になります。私の場をお借りしてお詫び申し上げで全ての人々の温かなメッセージを送への対応の問題がかかった漠然とした

【解決
こうたました。の実施によりカスタムIServerChannelSinkProviderとIServerChannelSinkしたいことが分かったアクセスCommonTransportKeys.IPAddressで追加のクライアントipのCallContext.

public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, 
    IMessage requestmessage, ITransportHeaders requestHeaders, 
    System.IO.Stream requestStream, out IMessage responseMessage, 
    out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
{
    try
    {
        // Get the IP address and add it to the call context.
        IPAddress ipAddr = (IPAddress)requestHeaders[CommonTransportKeys.IPAddress];
        CallContext.SetData("ClientIP", ipAddr);
    }
    catch (Exception)
    {
    }

    sinkStack.Push(this, null);
    ServerProcessing srvProc = _NextSink.ProcessMessage(sinkStack, requestmessage, requestHeaders,
        requestStream, out responseMessage, out responseHeaders, out responseStream);

    return srvProc;
}

その後のような要請からクライアント)のIPからのCallContext。

public string GetClientIP()
{
    // Get the client IP from the call context.
    object data = CallContext.GetData("ClientIP");

    // If the data is null or not a string, then return an empty string.
    if (data == null || !(data is IPAddress))
        return string.Empty;

    // Return the data as a string.
    return ((IPAddress)data).ToString();
}

できるようになってい送のIPす。

役に立ちましたか?

解決 5

こうたました。の実施によりカスタムIServerChannelSinkProviderとIServerChannelSinkしたいことが分かったアクセスCommonTransportKeys.IPAddressで追加のクライアントipのCallContext.

public ServerProcessing ProcessMessage(IServerChannelSinkStack sinkStack, 
    IMessage requestmessage, ITransportHeaders requestHeaders, 
    System.IO.Stream requestStream, out IMessage responseMessage, 
    out ITransportHeaders responseHeaders, out System.IO.Stream responseStream)
{
    try
    {
        // Get the IP address and add it to the call context.
        IPAddress ipAddr = (IPAddress)requestHeaders[CommonTransportKeys.IPAddress];
        CallContext.SetData("ClientIP", ipAddr);
    }
    catch (Exception)
    {
    }

    sinkStack.Push(this, null);
    ServerProcessing srvProc = _NextSink.ProcessMessage(sinkStack, requestmessage, requestHeaders,
        requestStream, out responseMessage, out responseHeaders, out responseStream);

    return srvProc;
}

その後のような要請からクライアント)のIPからのCallContext。

public string GetClientIP()
{
    // Get the client IP from the call context.
    object data = CallContext.GetData("ClientIP");

    // If the data is null or not a string, then return an empty string.
    if (data == null || !(data is IPAddress))
        return string.Empty;

    // Return the data as a string.
    return ((IPAddress)data).ToString();
}

できるようになってい送のIPす。

他のヒント

この質問をする場をより深くか考えの問題この場合、なぜ必要なの外部IPアドレスとは何ですか。"

の問題は、そのコンピュータないかもしれない外部IPアドレスです。例えば、私のノート内部のIPアドレス(192.168.x.y)によって課せられた場合を例に説明します。ルーター自体に内部IPアドレス、その"外部の"IPアドレスは内部.で伝えるためのDSLモデムは、実際には、外部インターネット向きのIPアドレスです。

したがって、本当に問題になり、"どのようにして求めるのですかインターネット向きのIPアドレスのデバイス2ホップできます。" の答えはございません;少なくともしないを使用せずにサービスなどwhatismyip.com いて、解散となることが本当に大量のハッキングに関hardcodingのDSLモデムパスワードには、アプリケーションから利用および照会のDSLモデムと械の管理者ページ(神きた場合、モデムは会

編集:現在この方への整理"という質問にどのようにそれらのIPアドレスのお客様からサーバーです。NETコンポーネント?" のようにwhatismyip.comのプライベートビーチにありサーバができることができるIPアドレスのインターネット向きの装置は実際のIPアドレスのコンピュータは、アプリケーションで実行さ.かノートパソコンがインターネット接続サービス向きのIPた75.75.75.75のLAN IPた192.168.0.112、サーバだけを見ることができ75.75.75.75IPアドレスです。そして私のDSLモデムに送ります。場合はサーバーから別途接続に戻るノートパソコンを最初に考えてみたいと思いを設定する必要があり、DSLモデムやルータinbetweenで、私のノートパソコン認識の着信接続をサーバからのルート。いめんなさい、その範囲外である.

場合の事実として生まれ変わろうとしている接続のサーバーは、見直しのデザインで躍する作領域(または少なくとも、使用力が低下していく傾向があり展開).

Dns.GetHostEntry(Dns.GetHostName());までの配列を返しの全てのIPアドレスを使います。第一の外部IP探しも、予約も、支払も、全部エまであることを確認してくださの背後にしてきました。

い:

IPHostEntry IPHost = Dns.GetHostEntry(Dns.GetHostName());
string externalIP = IPHost.AddressList[0].ToString();

編集:

報告されていると考えることはできませんの仕事。では私にとってもネットワークやpcの環境により、うまく動かない場合もあります。

良く利用 http://www.whatismyip.com/automation/n09230945.asp でのみ出力のIPだけを自動でルックアップ

いものに頼らない人って自分のページ http://www.unkwndesign.com/ip.php がんのスクリプト:

<?php
echo 'Your Public IP is: ' . $_SERVER['REMOTE_ADDR'];
?>

の下振れしたことがなくすみを取得する外部のIPインタフェースを作成するのに使用された。

ジョナサン-オランダの答えは、基本的に正しいという追加のAPIコールの背後にDns.GetHostByNameはかなり時間がかかるというキャッシュの結果ようにコードのみと呼ばれます。

主な問題は公共のIPアドレスは必ずしも相関のコンピュータは、アプリケーションで実行さ.では翻訳から、社内ネットワークを通じて、ファイアウォール.真の取得が可能なinterrogatingの地域ネットワークへの要求インターネットのページを返します。ない場合利用についてを公開WhatIsMyIP.com タイプのサイトを簡単に作れるし、ホストで行うのとして好ましくは、webserviceできるという単純なものsoap対応の呼び出しからお願います。ないと思わない画面キャプチャなどの裏方のポストの読み込みます。

また、IPが行きのアダプタを使用できWMIにWin32_NetworkAdapterConfigurationクラスです。

http://msdn.microsoft.com/en-us/library/aa394217(VS.85).aspx

Patrikソリューション作ってくれました。

一つ 重要な変化する。処理中のメッセージを設定します CallContext このコード:

// try to set the call context
LogicalCallContext lcc = (LogicalCallContext)requestMessage.Properties["__CallContext"];
if (lcc != null)
{
    lcc.SetData("ClientIP", ipAddr);
}

このipアドレスを正しいCallContextなので、後で取得すると GetClientIP().

ものと仮定してい System.Net.Sockets.TcpClient に接続されていただいているお客さまに(サーバ)を使用 client.Client.RemoteEndPoint.このまで System.Net.EndPoint ることを指摘し、クライアントその すべ を含むのインスタンス System.Net.IPEndPoint サブクラスではわかりませんの条件です。鋳造後に、確認できますので Address 物件の取得クライアントのアドレスです。

一言で申し上げます

using (System.Net.Sockets.TcpClient client = whatever) {
    System.Net.EndPoint ep = client.Client.RemoteEndPoint;
    System.Net.IPEndPoint ip = (System.Net.IPEndPoint)ep;
    DoSomethingWith(ip.Address);
}

テレビでも展開しております。

私は理論的にはできないなら背後にルーターなどの使用を無効ip範囲を使用せず、外部の"ヘルプ"があります

す基本的には解析のページに戻ることによってWebRequestの http://whatismyipaddress.com

http://www.dreamincode.net/forums/showtopic24692.htm

最も信頼性の高いるってこのチェックサイトのような http://checkip.dyndns.org/ または類似ので、まだ実際に外部ネットワークができなく外部まで高められる予定である。しかし、hardcodingようなURLはいじます。望を望むことができます。を行うことによりこのチェックが現在のIPのように見える RFC1918 プライベートアドレス(192.168.x.x 最も知られないのです。

なるべき実施し、類似サービスに座って外部ファイアウォールなどの、少なくとも知らな破となりました。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top