linux C++ 获取服务器外网IP地址(使用系统调用system)

废话不多说,直接贴代码:

#include<string.h>
#include<stdlib.h>
#include<stdio.h>
#include<string> int _System(const std::string cmd, std::string &output)
{
FILE * fp;
int res = -;
if ((fp = popen(cmd.c_str(), "r") ) == NULL)
{
printf("Popen Error!\n");
return -;
}
else
{
char pRetMsg[]={};
//get lastest result
while(fgets(pRetMsg,, fp) != NULL)
{
output+=pRetMsg;
} if ( (res = pclose(fp)) == -)
{
printf("close popenerror!\n");
return -;
}
return ;
}
} int main()
{
//test cmd
//char *cmd = "lsmod";
std::string cmd = "curl -s members.3322.org/dyndns/getip";
int ret = ;
std::string result;
ret = _System(cmd, result);
printf("ret = %d \nresult = %s\nlength = %d \n", ret, result.c_str(),result.length());
return ;
}

运行结果:

[login@server ~]$ g++ callsystemrt.cpp && ./a.out
ret =
result = 120.132.101.54 length =

本来想用C++socket来获得的,不过太麻烦,还不如直接通过 管道,来调用 system 系统回调.

可以做成配置,把 cmd 放到配置中,如果发现不起作用了,换一个其他的获取ip的第三方ip地址,并用 shell来筛选出ip地址,这样C++也不需要做处理,拿过来直接使用就好.

上一篇:ThinkPHP神秘应用架构扩展


下一篇:navicat实现Mysql数据备份