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