linux c 获取本机公网IP的实现方法_C语言教程-查字典教程网
linux c 获取本机公网IP的实现方法
linux c 获取本机公网IP的实现方法
发布时间:2016-12-28 来源:查字典编辑
摘要: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

相关阅读
推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  • 最新C语言学习
    热门C语言学习
    编程开发子分类