linux c 获取本机公网IP的实现方法
来源:本站原创|时间:2020-01-10|栏目:C语言|点击: 次
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.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系统调用--getrlimit()与setrlimit()函数的方法
栏 目:C语言
本文地址:https://www.xiuzhanwang.com/a1/Cyuyan/4469.html
您可能感兴趣的文章
- 01-10深入解析Linux下\r\n的问题
- 01-10Linux线程管理必备:解析互斥量与条件变量的详解
- 01-10Linux C 获取进程退出值的实现代码
- 01-10解析Linux下的时间函数:设置以及获取时间的方法
- 01-10深入探讨linux下进程的最大线程数、进程最大数、进程打开的文
- 01-10DHCP:解析开发板上动态获取ip的2种实现方法详解
- 01-10基于linux下获取时间函数的详解
- 01-10linux c 查找使用库的cflags与libs的方法详解
- 01-10深入探讨Linux静态库与动态库的详解(一看就懂)
- 01-10Linux下semop等待信号时出现Interrupted System Call错误(EINTR)解决方法
阅读排行
本栏相关
- 04-02c语言函数调用后清空内存 c语言调用
- 04-02func函数+在C语言 func函数在c语言中
- 04-02c语言的正则匹配函数 c语言正则表达
- 04-02c语言用函数写分段 用c语言表示分段
- 04-02c语言中对数函数的表达式 c语言中对
- 04-02c语言编写函数冒泡排序 c语言冒泡排
- 04-02c语言没有round函数 round c语言
- 04-02c语言分段函数怎么求 用c语言求分段
- 04-02C语言中怎么打出三角函数 c语言中怎
- 04-02c语言调用函数求fibo C语言调用函数求
随机阅读
- 01-10C#中split用法实例总结
- 08-05DEDE织梦data目录下的sessions文件夹有什
- 01-10delphi制作wav文件的方法
- 08-05dedecms(织梦)副栏目数量限制代码修改
- 01-10SublimeText编译C开发环境设置
- 08-05织梦dedecms什么时候用栏目交叉功能?
- 01-10使用C语言求解扑克牌的顺子及n个骰子
- 01-11Mac OSX 打开原生自带读写NTFS功能(图文
- 04-02jquery与jsp,用jquery
- 01-11ajax实现页面的局部加载