Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Curl 更改后将ip地址发送到我的电子邮件_Curl_Ip Address_Sendmail_Remote Access - Fatal编程技术网

Curl 更改后将ip地址发送到我的电子邮件

Curl 更改后将ip地址发送到我的电子邮件,curl,ip-address,sendmail,remote-access,Curl,Ip Address,Sendmail,Remote Access,我正在我的办公室机器上远程工作,我希望在更改时收到一封带有新ip地址的电子邮件。我曾经说过,我可以使用curl来实现这一点,但我找不到任何关于如何实现这一点的信息 你需要的不仅仅是卷曲 您当然可以使用curl来抓取https://www.whatismyip.com,但您需要某种脚本语言(或编译语言)来解析它,提取IP地址,然后检查它是否不同。如果您希望使用bash,可以安装mailutils apt-get install mailutils 然后获取ifconfig数据并使用它发送。 这里

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

你需要的不仅仅是卷曲


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

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

apt-get install mailutils
然后获取ifconfig数据并使用它发送。 这里有一个教程

在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它,或者将其包装为True,创建全局_变量,并使用脚本开始时的当前ip地址,如果与当前ip不匹配,则发送邮件。 遗憾的是,如果您的PC有多个ip,PHP的$u服务器[]变量就会出现问题。在这种情况下,这是一个解决办法

编辑: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)

?>

你需要使用它。
另外,使用https页面需要在php.ini中进行更改,因此我将该页面更改为google为我找到的第一个页面whatismyipaddress.com。

如果我要每天运行.sh脚本,我必须将其插入bash文件吗?是的。。。除了编写所有支持代码以提取IP并检查其是否更改之外。您可能会发现Python或Ruby之类的东西更容易,因为它们有用于抓取和解析网页的库,而Bash没有。问题是OP很可能位于NAT防火墙后面。在这种情况下,IP将永远不会出现在盒子上。至少,我是这样读这个问题的。编辑了我的答案并添加了使用DOM遍历解析器的方法。我对NAT没有太多的经验,但是如果curl可以工作,那么这个也应该可以。