更改时,将IP地址发送到我的电子邮箱

时间:2015-06-05 23:55:47

标签: curl ip-address sendmail remote-access

我在我的办公室机器上远程工作,我希望在更改时收到带有新IP地址的电子邮件。我曾经说过,我可以使用UnitClass做到这一点,但我找不到任何关于如何实现它的内容。

2 个答案:

答案 0 :(得分:1)

你需要的不仅仅是卷曲。

你当然可以使用curl来抓取https://www.whatismyip.com,但你需要某种脚本语言(或编译语言)来解析它,提取IP地址,然后检查它是否有所不同

答案 1 :(得分:1)

如果您希望使用bash,可以安装mailutils。

apt-get install mailutils

然后只需获取ifconfig数据并使用它发送。 这是一个教程http://www.binarytides.com/linux-mail-command-examples/

在Python中你可以按照以下方式做点什么:

import socket
import smtplib
from email.mime.text import MIMEText

email_from = "script@email.com"
email_to = "youremail@email.com"

s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s.connect(("google.com", 80))
ipaddress = s.getsockname()[0]
s.close()

msg = MIMEText(ipaddress)
msg['Subject'] = 'Your current IP ADDRESS %s' % ipaddress
msg['From'] = email_from
msg['To'] = email_to

s = smtplib.SMTP('localhost')
s.sendmail(email_from, [email_to], msg.as_string())
s.quit()

在PHP中:

<?php

$message = "Current IP ADDRESS: " . get_ip();

$email_to = "youremail@email.com";

mail($email_to, $message, $message);

function get_ip($destination='64.0.0.0', $port=80)
{
  $s = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
  socket_connect($s, $destination, $port);
  socket_getsockname($s, $ipaddress, $port);
  socket_close($s);
  return $ipaddress;
}

?>

然后只需crontab它,或将其包装在While True中,在脚本启动时使用当前的ipaddress创建global_variable,如果与当前的ip不匹配,则发送邮件。 遗憾的是,如果您的PC有多个ip,那么PHP的$ _SERVER []变量就会出现问题。这是一种解决方法。

编辑:PHP中的其他方式

<?php

require('simple_html_dom.php');
$html = file_get_html('http://whatismyipaddress.com/');

foreach($html->find('a') as $element){
    if(preg_match('/\/\/whatismyipaddress.com\/ip\/(.*)/', $element->href, $match))
        $ipaddress = $match[1];
}

$email_to = "youremail@email.com";
$message = "Current IP ADDRESS: " . $ipaddress;

mail($email_to, $message, $message)

?>

要使用它,您需要http://simplehtmldom.sourceforge.net/。 另外使用https页面需要更改php.ini,所以我将页面更改为google为我找到的第一个whatismyipaddress.com。