2011-09-15 10 views
3

リモートサーバーに接続するときにcURLが使用しているIPアドレスをプログラムで判断することはできますか?私はcURLを使用している共有サーバーを持っており、要求の一部としてIPアドレスを送信する必要があります。cURLでPHPを使用すると、cURLが使用するIPアドレスを判別できますか?

私が話しているサーバには、接続IPアドレスとローテーションするパスコードを組み合わせた認証文字列が必要です(たとえば、$ $ SERVER ['SERVER_ADDR']。$ passcode)。 SHA1($ _ SERVER ['REMOTE_ADDR']。$パスコード))。これは、cURLからの発信接続が$ _SERVER ['SERVER_ADDR']に格納されているものと同じIPを使用していたときにうまく機能しましたが、cURLで使用されるIPアドレスは現在異なり、定期的に回転しています。

答えて

3

電話をかける前に、あなたのパブリックIPを取得するには、この操作を行うことができます。

$ch = curl_init('http://whatismyip.org/'); 
curl_setopt($ch,CURLOPT_RETURNTRANSFER,TRUE); 
$myIp = curl_exec($ch); 
しかし

  • あなたのパブリックIPは時々のcURLセッション間で変更された場合は、文句を言わないことと言うことは何もありません上記のセッションと実際にこのデータが必要な次のセッションとの間で変更します。
  • 実際に実行されているのはwhatismyip.org(または同様のサービス)です。
+0

+1、私はそれが非常に重要な警告なしに与えていないが、プールがある場合、IPがあるコールから別のコールまで同じであるという保証はない。単一コール内の複数のcURLセッションが同じIPからのものであるかどうかは不明です。 – Orbling

+0

今のところ、これは私が使用しているソリューションですが、アクセス制限のないIPアドレスをより迅速に決定するためのwhatismyipではなく、私の目的のためにサービスを提供しています。残念ながら、1時間に3000回の接続で、これは私にとって最も効率的な解決策ではないので、私はまだ見ています。 – Wige

2

カールが検出するのとは対照的に、カールが使用するIPを強制することができます。

オプションをcurl_setopt()に使用する - 使用するIPに設定します。

IPプールを持つクラウドサーバーなどのサーバーを使用している場合は、セキュリティ上の理由から、反対側のサーバーを検出することが重要な場合は、使用するインターフェイスを選択することをお勧めします。

個人的には、IPが制限されている場合、私はcURL経由でカード支払いデータ転送にこの機能を使用しなければなりませんでした。

+0

最高の解決策は+1ですが、共有ホスティングでは不可能かもしれません。 – DaveRandom

+0

@DaveRandom:ほとんどの共有ホスティングプラットフォームには、バインド可能なホスティングサーバーのプライマリIPが少なくともあります。ただし、変更すると同時に許可されるとは限りません。 – Orbling

+3

これについて私が考えたのは、複数のIPアドレスが1つのNICにバインドされている場合、特定のIPを渡してもインターフェイスを選択しても特定のIPアドレスが保証されないことがあります。 cURLは( 'eth0'のような)インタフェース参照のみを使用し、IP /ホスト名を渡す場合はそれを使用してインタフェース参照を取得します。実際にパケットにソースIPを割り当てることは、NICドライバの責任であり、それを制御するためには何もできません(少なくとも、PHP経由ではありません)。 – DaveRandom

1

whatismyip.comというWebサイトがあります。彼らはあなたが制限を超えない限り(1時間に5リクエスト何かのようなものです)、あなたが利用できる公に利用可能なAPIを持っています。それを撃つことを傷つけませんか?

1

curlが常に同じサーバーから実行されていると仮定すると、複数のNICがあっても、curlにどのIPを使用するかは関係ありません。

私はIPを使用すると、現在、2つの呼び出しは十分に接近していると仮定すると、

curl_setopt($ch, CURLOPT_INTERFACE, "XXX.XXX.XXX.XXX"); 

を使用して次の呼び出しのためにそれを設定し、使用しているものを得るのDaveRandomのトリックを使用し、IPをすることを非常に高い可能性がありますそれでもなおインターフェイスにバインドされていて、それを設定することによって、ロードバランサが使用したいかもしれないものの代わりに、curlにそれを使用するように伝えます。

関連する問題