linux本机公网ip,linux c 获取本机公网IP的实现方法

﹏ヽ暗。殇╰゛Y 2023-01-20 12:50 56阅读 0赞

在穿透Linux环境时,有时由于权限或其他原因不能使用ifconfig命令,可以使用以下方法查看外部网络,下面就跟着爱站技术频道小编的步伐来学习linux c 获取本机公网IP的实现方法吧。

1、linux c代码实现

#include

#include

#include

#include

#include

#include

#include

#include

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.1\r\nHost:www.ip138.com\r\nConnection:Close\r\n\r\n”};

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:%s\n”,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%s\n”,res);

return 0;

}

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

gcc -o getip getip.c

3、运行程序

./getip

以上就是爱站技术频道小编给大家介绍的linux c 获取本机公网IP的实现方法,看完都明白了吧,希望以上内容对大家有所帮助,更多技术必备知识请关注本站。

发表评论

表情:
评论列表 (有 0 条评论,56人围观)

还没有评论,来说两句吧...

相关阅读

    相关 C# 获取IP方法

    今天打算试着写个小聊天程序,但是要用到获取本机IP,以前从没用过。摆渡百度了一会儿,出于贪心,想把各种获取本机IP的方法给找出来。摆渡+测试了几个小时,于是有了下面的成果,有点