获取路由器外网ip并email(从sina博客移入)

在网上找到了这个网页,它返回的html代码在body标签中只有访问者的ip,可以很方便的进行解析。下载的任务就交个了libcurl库,它是一个强大的下载库,支持很多不同的协议。根据官方的文档,能够很方便的将页面下载到内存中,而且正好只有body标签里面的数据,免去了字符处理的步骤。关键代码:

[cc lang=’c’ ]

char *fetchIP(char *url)

{

char *IP = (char*)malloc(20);

CURL *curl_handle;

struct memStruct memHtml =

{ NULL, 0 };

curl_global_init(CURL_GLOBAL_ALL);

curl_handle = curl_easy_init(); //初始化curl句柄

curl_easy_setopt(curl_handle, CURLOPT_URL, url); //设置url

curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, writeMemoryCallback); //设置回调函数

curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&memHtml); //设置保存的结构

curl_easy_setopt(curl_handle, CURLOPT_USERAGENT, “libcurl-agent/1.0″); //设置agent

CURLcode ret = curl_easy_perform(curl_handle);

//返回了错误代码,打印错误,返回NULL指针

if (ret != CURLE_OK)

{

printf(“error(%d): %s”, ret, curl_easy_strerror(ret));

curl_easy_cleanup(curl_handle);

curl_global_cleanup();

return NULL;

}

curl_easy_cleanup(curl_handle);

strncpy(IP, memHtml.memory, memHtml.size – 1);

if (memHtml.memory)

{

free(memHtml.memory);

}

curl_global_cleanup();

return IP;

}

[/cc]

其中memStruct结构定义为:

[cc lang=’c’ ]

struct memStruct

{

char *memory;

size_t size;

};

[/cc]

回调函数主要是将获取到的值存入自定义的结构中:(其中第一个参数为实际下载的数据,后面两个size_t类型的参数的乘积是此次下载数据的总长度,最后一个参数为注册保存数据结构的指针)

[cc lang=’c’ ]

static size_t writeMemoryCallback(void *ptr, size_t size, size_t nmemb,

void *data)

{

size_t realsize = size * nmemb;

struct memStruct *mem = (struct memStruct*) data;

mem->memory = myrealloc(mem->memory, mem->size + realsize + 1);

if (mem->memory)

{

memcpy(&(mem->memory[mem->size]), ptr, realsize);

mem->size += realsize;

mem->memory[mem->size] = 0;

}

return realsize;

}

[/cc]

获取了ip地址之后,就是要发送邮件了。这里为了简单起见,直接调用了系统的mail命令发送邮件。

[cc lang=’c’ ]

int mail(char *destination, char *subject, char *content)

{

FILE *fp;

char command[1024];

fp = fopen(“/tmp/letter”, “w”);

fputs(content, fp);

fclose(fp);

sprintf(command, “mail -s %s %s <letter”, subject, destination);

int ret = system(command);

system(“rm -f /tmp/letter”);

return ret;

}

[/cc]

不过,即使是使用了mail命令,也需要在本地架设邮件服务器,因为在自己的笔记本电脑上装的是postfix,所以在龙芯电脑上装的也是postfix。安装非常方便,直接apt-get install postfix就可以了,后面设置成直接发送邮件。

但是这样的设置会有问题,mail命令发送到gmail的邮件都被认为是垃圾邮件,即使能够添加过滤器来阻止,但有时候gmail的smtp服务器会直接阻止邮件的发送。所以需要重新设置下postfix。我把postfix设置成了使用gmail的smtp发送邮件。具体设置方法比较麻烦,参考的是这里。不过里面的脚本因为写死了路径,不太好用,还是建议直接按照后面的手工操作步骤来执行。不过手工执行的时候还是要注意路径,特别是生成的认证文件的路径,如果签名或者其他步骤中提示有文件找不到,需要调整文件的路径。

设置之后重启postfix,在命令行中使用mail命令测试下,在收件箱里面可以看见,发件人编程了gmail自己定义的gmail了,这样邮件服务器就不会把这个邮件认为是垃圾邮件了。

转载自:https://coolex.info/blog/55.html

时间: 2024-09-09 07:58:22

获取路由器外网ip并email(从sina博客移入)的相关文章

C#获取路由器外网IP,MAC地址的实现代码_C#教程

C#实现的获取路由器MAC地址,路由器外网地址.对于要获取路由器MAC地址,一定需要知道路由器web管理系统的用户名和密码.至于获取路由器的外网IP地址,可以不需要知道路由器web管理系统的用户名和密码,但是需要有一个代理页面获取客户端公网ip地址的,这样C#请求此页面即可获取到路由器公网ip地址.如 //getip.ashx 测试路由为水星 MR804,水星 MR808,都可以成功重启路由和获取到路由器MAC和外网IP地址 源代码 using System.Text; using System

接口-asp获取客户端外网ip(不是192.168形式)

问题描述 asp获取客户端外网ip(不是192.168形式) 服务器上发布了系统,System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString或者System.Web.HttpContext.Current.Request.UserHostAddress;都是得到192.168格式的,我需要得到客户端的对外访问的IP(公司所有同事对外访问的IP都为:180.169.88.9

java后台获取客户端外网ip

问题描述 java后台获取客户端外网ip 下面就是我用过的办法,但是都没作用,都是获得的内网ip public static String getRealIp() throws SocketException { String localip = null;// 本地IP,如果没有配置外网IP则返回它 String netip = null;// 外网IP Enumeration<NetworkInterface> netInterfaces = NetworkInterface.getNet

js获取客户端外网ip的简单实例_javascript技巧

var wwip=""; $(function(){ $(document).ready( function() { $.getJSON( "http://smart-ip.net/geoip-json?callback=?", function(data){ alert( data.host); wwip=data.host; } ); }); }); 这个问题查了很多资料,都不可以,这个还好用. 例子,js获取本地与外网IP地址. <script lang

android获取wifi外网ip的方法

android获取wifi外网ip的方法 // 获取外网IP   public static String GetNetIp() {       URL infoUrl = null;       InputStream inStream = null;       try {           // http://iframe.ip138.com/ic.asp           // infoUrl = new URL("http://city.ip138.com/city0.asp&qu

同局域网内,已知一个设备的外网IP,如何获取其外网IP?

问题描述 在同一个局域网内,已知一个设备的外网IP,如何获取其内网IP?用C#代码该怎么实现?或者是,在Socket通讯中,怎么获取远端设备的内网IP? 解决方案 本帖最后由 GAMU_kaito 于 2014-02-13 10:46:12 编辑解决方案二:补充一下,这个时候那个设备是在线的,但是那天设备不是本地机器个人的思路是:1.首先获取到局域网内所有在线的设备的外网IP和内网IP2.根据已知的外网IP查找到对应的内网IP但是一来,个人不知道第一步该怎样用代码实现:二来,觉得这样的方法似乎很

通过特定获取获取电脑外网IP地址

void get_WanIp() { char Buf_File_Read[MAX_PATH] = {0}; char IP_Temp[128]; char IP_Host[64]; int Result_URLDownloadToFile = 1; char szFilePath[MAX_PATH] = {0}; GetTempPathA(MAX_PATH,szFilePath); strcat(szFilePath,"IPinTheWorld.ini"); Result_URLDo

路由器-Android 局域网IP对讲机如何扩展成为外网IP对讲?

问题描述 Android 局域网IP对讲机如何扩展成为外网IP对讲? 现在的架构是:Android设备2台,路由器一个. 1.双方使用socket开启端口监听网络的音频数据. 2.填写对方IP(路由器下的内网) 3.发送音频数据到对方端口.IP+port 现在希望可以扩展成为不在一个路由器下进行通讯. 解决方案 在公网建立服务器,负责转发.双方都和公网连. 解决方案二: 看过NAT打洞技术.希望做成P2P的连接方式.但是目前还不知道进行Session分配的端口怎么获取.不知道这个端口通过什么样的

python获取外网ip地址的方法总结

  本文实例总结了python获取外网ip地址的方法.分享给大家供大家参考.具体如下: 一.利用脚本引擎库直接获取 ? 1 2 3 4 5 6 7 import console; import web.script import inet.http; var jsVm = web.script("JavaScript") jsVm.AddCode( inet.http().get("http://fw.qq.com/ipaddress") ) var ipAddr