首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
ubuntu
容器
运维
交换机
jenkins
ssh
linux
sftp
dns
centos7
touch
sudo
kubectl
fabric
syslog
service
crontab
awk
ftp
负载均衡
devops
docker
nginx
压力测试
tengine
centos
stdout
debian
cron
curl
server
shell
vagrant
zsh
log4j
apache
tomcat
服务器
port
grep
路由器
colors
7层
4层
grafana
k8s
当前位置:
开发笔记
>
运维
> 正文
linuxc获取本机公网IP的实现方法
作者:倩倩倩倩倩倩雯- | 来源:互联网 | 2021-10-21 14:53
本篇文章是对在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
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
linux
GuiLite 2.5 推出:探索3D视界
经过长时间的探索与实践,GuiLite团队成功推出了带有3D效果的新示例——Hello3D。这一成果不仅突破了传统2D引擎的局限,还确保了在不同平台上的兼容性和低资源消耗。 ...
[详细]
蜡笔小新 2024-12-16 12:35:52
service
详解Linux系统启动过程及/etc/rc.d与/etc/rc.d/init.d目录关系
本文深入探讨了Linux系统启动流程、运行级别及其与/etc/rc.d和/etc/rc.d/init.d目录的关联,旨在帮助读者理解系统启动时各脚本和服务的加载机制。 ...
[详细]
蜡笔小新 2024-12-16 12:18:02
linux
PHP 字符串处理:检测子字符串及位置
本文探讨如何使用 PHP 进行字符串处理,特别是如何检测一个字符串是否存在于另一个字符串中,并确定其具体位置。通过实例代码展示,帮助读者掌握这一常用功能。 ...
[详细]
蜡笔小新 2024-12-15 19:09:50
centos
在DELL Inspiron 14R上部署CentOS X64 6.4的详细步骤
本文详细记录了在DELL Inspiron 14R笔记本电脑上安装CentOS X64 6.4操作系统的过程,包括遇到的问题及解决方法。 ...
[详细]
蜡笔小新 2024-12-15 18:10:54
linux
深入解析insmod与modprobe命令的差异及应用场景
本文详细探讨了Linux系统中insmod与modprobe两种模块加载命令的主要区别及其具体应用场景,特别是在处理模块依赖关系和避免重复加载方面的作用。 ...
[详细]
蜡笔小新 2024-12-15 15:32:26
linux
如何在Linux系统中安装并使用虚拟机
本文详细介绍了在Linux操作系统中安装和配置虚拟机的方法,包括选择合适的虚拟机软件、安装过程及基本配置步骤。 ...
[详细]
蜡笔小新 2024-12-15 15:12:52
linux
基于OpenWrt构建首个'Hello World' IPK应用
本文介绍如何在Ubuntu环境下为OpenWrt系统构建并安装首个'Hello World'应用程序的IPK包。文章不仅涵盖了基本的环境搭建,还详细说明了代码编写、Makefile配置及最终的IPK包生成与安装过程。 ...
[详细]
蜡笔小新 2024-12-15 13:28:28
linux
Java程序员必备:最新面试问题解析(基础篇)
本文整理了一系列Java面试问题,涵盖Java开发环境的分类、Java语言的核心特性、Linux环境下Java SE的安装步骤、常用的Java开发工具介绍,以及类与对象的基本概念等。 ...
[详细]
蜡笔小新 2024-12-15 12:13:22
cron
如何确保Python长期运行进程的稳定性和效率
本文探讨了在Unix/Linux环境下,如何有效地管理和运行长期或无限期运行的Python进程。文章不仅提供了关于进程崩溃后的处理方法,还讨论了使用Cron和Inetd等工具来优化进程管理的策略。 ...
[详细]
蜡笔小新 2024-12-15 11:34:37
linux
Linux文本处理技巧
本文介绍了在Linux系统中常用的文本操作命令,包括文件查看、搜索和重定向等基本操作。通过这些命令,用户可以高效地管理文件内容。 ...
[详细]
蜡笔小新 2024-12-15 10:43:10
curl
使用Jenkins构建Java项目实践指南
本指南详细介绍了如何使用Jenkins构建Java项目,包括环境搭建、工具配置以及项目构建的具体步骤。 ...
[详细]
蜡笔小新 2024-12-15 10:32:48
awk
如何在Unix中使用ls -lsh命令仅输出文件大小
本文探讨了如何使用ls -lsh命令排除总大小输出,仅显示文件大小的方法,并提供了几种实现这一目标的解决方案。 ...
[详细]
蜡笔小新 2024-12-15 09:42:12
linux
避免在C/C++中将字符串常量直接转换为char*类型的方法
在较新的GCC版本中,当尝试将字符串常量传递给期望非const char*参数的函数时,可能会遇到编译警告。本文探讨了这一问题的原因及解决策略。 ...
[详细]
蜡笔小新 2024-12-15 08:38:07
linux
深入理解Linux文件权限:rws、rwt、rwT、rwS及其特殊用途
Linux系统中,文件权限不仅限于常见的777、666等数值表示,还包括特殊的权限位如setuid、setgid和sticky bit,这些权限位能够赋予文件或目录额外的功能,增强系统的灵活性和安全性。 ...
[详细]
蜡笔小新 2024-12-14 22:29:21
linux
深入理解二叉树的遍历算法:VRL、RVL、RLV
本文详细介绍了二叉树的不同遍历方法,包括层次遍历、先序遍历(VRL)、中序遍历(RVL)和后序遍历(RLV)。通过具体示例和代码实现,帮助读者更好地理解和应用这些遍历技术。 ...
[详细]
蜡笔小新 2024-12-14 18:45:06
倩倩倩倩倩倩雯-
这个家伙很懒,什么也没留下!
Tags | 热门标签
ubuntu
容器
运维
交换机
jenkins
ssh
linux
sftp
dns
centos7
touch
sudo
kubectl
fabric
syslog
service
crontab
awk
ftp
负载均衡
devops
docker
nginx
压力测试
tengine
centos
stdout
debian
cron
curl
RankList | 热门文章
1
2008年1月微软发布两项安全更新
2
利用Scrapy构建的数据采集与分析可视化系统
3
深入解析:Hive JDBC编程实践
4
Python Numpy 数组创建技巧:从列表到高效Numpy数组转换
5
如何在SQL Report Service中应用TOP N功能
6
如何寻找程序员的兼职机会
7
使用CorelDRAW X7轻松绘制卡通风格杯子教程
8
将datatable导出为excel的三种方式(转)
9
如何有效解决Windows 10内存不足的问题
10
egg实现登录鉴权(七):权限管理
11
深入理解Hibernate框架:实体对象的状态及saveOrUpdate方法解析
12
iOS开发中的UIView及其子类应用
13
如何确定当前显示的 View Controller 以展示 Alert
14
Django REST Framework 集成指南
15
精妙的门面设计:Request对象的安全封装
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有