手机
当前位置:查字典教程网 >编程开发 >C语言 >linux c 获取本机公网IP的实现方法
linux c 获取本机公网IP的实现方法
摘要:1、linuxc代码实现复制代码代码如下:#include#include#include#include#include#include#...

1、linux c代码实现

复制代码 代码如下:

#include <netdb.h>

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#include <unistd.h>

#include <arpa/inet.h>

#include <netinet/in.h>

#include <sys/socket.h>

typedef enum {false,true}bool;

int main()

{

bool flag;

int sock;

char **pptr = NULL;

struct sockaddr_in destAddr;

struct hostent *ptr = NULL;

char destIP[128];

char szBuffer[] = {"GET /ip2city.asp HTTP/1.1rnHost:www.ip138.comrnConnection:Closernrn"};

char res[1024];

//初始化socket

sock = socket(AF_INET,SOCK_STREAM,0);

if( -1 == sock ){

perror("creat socket failed");

exit(0);

}

bzero((void *)&destAddr,sizeof(destAddr));

destAddr.sin_family = AF_INET;

destAddr.sin_port = htons(80);

//首先是获取www.ip138.com的IP地址

ptr = gethostbyname("www.ip138.com");

if(NULL == ptr){

perror("gethostbyname error");

exit(0);

}

//对于www.ip138.com的每个IP进行尝试连接,直到有一个连接成功为止,或者无法连接,则退出程序

for(flag=false,pptr=ptr->h_addr_list ; NULL != *pptr ; ++pptr){

inet_ntop(ptr->h_addrtype,*pptr,destIP,sizeof(destIP));

printf("addr:%sn",destIP);

destAddr.sin_addr.s_addr = inet_addr(destIP);

if(-1!=connect(sock,(struct sockaddr *)&destAddr,sizeof(struct sockaddr))){

flag = true;

break;

}

}

if(false == flag){

perror("connect failed");

}

//发送获取IP的数据包给www.ip138.com

if(strlen(szBuffer) != send(sock,szBuffer,strlen(szBuffer),0)){

perror("send error");

exit(0);

}

//接收数据包

if(-1 == recv(sock,res,1024,0)){

perror("recv error");

exit(0);

}

printf("res:n%sn",res);

return 0;

}

2、将上述代码保存getip.c,并使用如下命令编译

复制代码 代码如下:

gcc -o getip getip.c

3、运行程序

复制代码 代码如下:

./getip

【linux c 获取本机公网IP的实现方法】相关文章:

深入全排列算法及其实现方法

给ActiveX签名的实现方法详解

c/c++输出重定向的方法

c++大数阶乘的实现方法

c语言连接mysql数据库的实现方法

C++获取zip文件列表方法

将正小数转化为2-9进制小数的实现方法

深入Linux grep指令的详解(实用型)

atoi和itoa函数的实现方法

C++可变参数的实现方法

精品推荐
分类导航