私は、spypig.com のようなサービスが電子メールに小さな画像を配置し、それがいつどこから開かれたかを追跡しているのを見てきました。彼らは都市、国、IP アドレスなどを追跡します。これはどのように行われますか?
- メールが開封されたことをどのように知ることができますか? そして、画像はどのように生成されますか?
- IP アドレスはどのように検出され、どのようにしてそこから位置を知ることができますか?
私は、spypig.com のようなサービスが電子メールに小さな画像を配置し、それがいつどこから開かれたかを追跡しているのを見てきました。彼らは都市、国、IP アドレスなどを追跡します。これはどのように行われますか?
基本的に、メールの HTML 本文には、次の<img>
ようなタグがあります。
<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" />
画像が有効な状態で誰かがメールを読むと、メール クライアントは にリクエストを送信し、画像をロードしてパラメータとしてtracker.php
渡します。id=123456
このtracker.php
スクリプトはサーバー上にあり、呼び出されると次のようになります。
id
パラメータを確認し、id
と、電子メールごとに異なる電子メールが生成されます。
このtracker.php
スクリプトは、他の PHP スクリプトと同様に、どの IP アドレスから呼び出されたかを認識しています。
$ipAddress = $_SERVER['REMOTE_ADDR'];
そして、この IP アドレスから始めて、地理位置情報サービスを使用して、メールが世界中のどこから開封されたかを調べることができます。
いくつかの例として、MaxMindまたはIPInfoDBを見てください。
1 つの特定の電子メール アドレスに対応することがわかっているid=123456
ように、これにより、各購読者がどこにいるかを知ることができます。
1.トラッカー画像を電子メールに配置します
<img src="http://www.yoursite.com/tracker.php?eid=123456&uid=123" alt="" width="1px" height="1px">
その仕組みは非常にシンプルです。メールが開かれると、そのトラッカー イメージがサーバーにリクエストを送信します。そのリクエストから、ユーザー ID を含む画像 URL を作成して情報を取得し、そのメールがユーザーによって読まれたと見なします。
注: display: none; は使用しないでください。画像を非表示にするためのプロパティで、スパム アルゴリズムによってフィルタリングされる場合があります。また、JavaScript コードを配置しないでください。スパム フィルターもブロックします。
2. tracker.php で
<?php
header("Content-Type: image/jpeg"); // it will return image
readfile("img.jpg");
dbfunction(); // place your db code
?>
3. 次の関数で IP アドレスを取得します。
function get_client_ip() {
$ipaddress = '';
if (isset($_SERVER['HTTP_CLIENT_IP']))
$ipaddress = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_X_FORWARDED']))
$ipaddress = $_SERVER['HTTP_X_FORWARDED'];
else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
$ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
else if(isset($_SERVER['HTTP_FORWARDED']))
$ipaddress = $_SERVER['HTTP_FORWARDED'];
else if(isset($_SERVER['REMOTE_ADDR']))
$ipaddress = $_SERVER['REMOTE_ADDR'];
else
$ipaddress = 'UNKNOWN';
return $ipaddress;
}
$PublicIP = get_client_ip();
4. 場所:
場所は任意の地理位置情報サービスによって取得されます 。 nekudo、freegeoipなどのオープンソースの GeoLocation finder を使用できます。
例えば
<?php
$json = file_get_contents("http://ipinfo.io/$PublicIP/geo");
$json = json_decode($json ,true);
$country = $json['country_name'];
$region= $json['region_name'];
$city = $json['city'];
?>
質問の最初の部分について、私がしたことは PHP ファイルから画像を返すことでした。画像 (1x1 ピクセルの透明な png の場合もあります) を返すだけでなく、すべての情報をデータベースに記録しています。このようにして、PHP ファイルが呼び出されると、画像が読み込まれた、つまり電子メールが読まれたことがわかります。問題は、最新のクライアントの多くが画像を自動的にロードしないことです。これは、プライバシー上の理由から、あなたがやろうとしているようなことだけを許可しないためです.
2 番目の部分については、いくつかのジオロケーション Web サービスがあり、IP を送信してジオロケーションを取得します。これは、1x1 ピクセルの画像を返す PHP ファイルで行うことができます。このサイトのこれに関する良いスレッドは次のとおりです: 地理位置情報 Web サービスの推奨事項