使用PHP和图像跟踪电子邮件

esa*_*wan 26 php email tracking geolocation spy

我已经看到像spypig.com这样的服务在电子邮件中放置一个小图像,并在打开时从哪里跟踪.他们跟踪城市,国家,IP地址等.这是怎么做到的?

  1. 我们怎么知道邮件何时开通?图像是如何生成的?
  2. 如何检测IP地址以及如何从中获知位置?

Pas*_*TIN 57

基本上,在您的电子邮件的HTML正文中,将会有一个如下所示的<img>标记:

<img src="http://www.yoursite.com/tracker.php?id=123456" alt="" />
Run Code Online (Sandbox Code Playgroud)

当有人阅读他的邮件时,如果启用了图像,则电子邮件客户端将发送请求tracker.php以加载图像,并将其id=123456作为参数传递.


tracker.php脚本将在您的服务器上,并在调用时,它将:

  • 检查id参数,
  • 使用它来查找它对应的电子邮件地址 - 在为每个订阅者生成电子邮件时,您将为id每封电子邮件生成不同的电子邮件.
  • 做一些事情 - 比如日志"电子邮件123456已被打开",还有一些额外的信息
  • 返回小图片的内容; 像一个1x1透明的GIF.


tracker.php脚本知道从哪些IP地址它被称为-像任何其他PHP脚本:

$ipAddress = $_SERVER['REMOTE_ADDR'];
Run Code Online (Sandbox Code Playgroud)

并且,从此IP地址开始,您可以使用地理定位服务来查找电子邮件已在世界中的哪个位置打开.
作为几个示例,您可以查看MaxMindIPInfoDB

如您所知,这id=123456对应于一个特定的电子邮件地址,这样可以找出每个订阅者的位置.

  • 如何从`tracker.php`返回`image`? (2认同)
  • 为什么不在电子邮件内容中使用另一个图像,一个实际上要渲染的图像,即徽标,标题图像等? (2认同)

Nav*_*nDA 12

1.将跟踪器图像放在电子邮件中

<img src="http://www.yoursite.com/tracker.php?eid=123456&uid=123" alt="" width="1px" height="1px">
Run Code Online (Sandbox Code Playgroud)

它的工作非常简单,一旦您的邮件打开,该跟踪器图像就会将请求发送到服务器,从该请求我们可以通过使用userID创建图像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
?>
Run Code Online (Sandbox Code Playgroud)

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();
Run Code Online (Sandbox Code Playgroud)

4.地点:

任何地理定位服务都可以获得该位置,您可以使用像nekudo,freegeoip这样的开源GeoLocation查找 程序.

例如

<?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'];
?>
Run Code Online (Sandbox Code Playgroud)

  • 也许我错了,但是必须在服务器上调用ipecho-part,所以你只能得到服务器的IP地址? (2认同)