首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

c 如何获取内网的ip地址

在C语言中获取内网IP地址可以通过调用系统API来实现。以下是在Windows和Linux系统中获取内网IP地址的示例代码。

Windows系统

在Windows系统中,可以使用Winsock API来获取本地IP地址。

代码语言:txt
复制
#include <stdio.h>
#include <winsock2.h>

#pragma comment(lib, "ws2_32.lib")

int main() {
    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        printf("WSAStartup failed.\n");
        return 1;
    }

    char hostname[256];
    if (gethostname(hostname, sizeof(hostname)) == SOCKET_ERROR) {
        printf("gethostname failed with error: %d\n", WSAGetLastError());
        WSACleanup();
        return 1;
    }

    struct addrinfo hints, *res, *ptr;
    ZeroMemory(&hints, sizeof(hints));
    hints.ai_family = AF_INET; // 使用IPv4
    hints.ai_socktype = SOCK_STREAM;
    hints.ai_protocol = IPPROTO_TCP;

    int status = getaddrinfo(hostname, NULL, &hints, &res);
    if (status != 0) {
        printf("getaddrinfo failed with error: %s\n", gai_strerror(status));
        WSACleanup();
        return 1;
    }

    for (ptr = res; ptr != NULL; ptr = ptr->ai_next) {
        struct sockaddr_in *ipv4 = (struct sockaddr_in *)ptr->ai_addr;
        char ipstr[INET_ADDRSTRLEN];
        inet_ntop(AF_INET, &(ipv4->sin_addr), ipstr, INET_ADDRSTRLEN);
        printf("Local IP address: %s\n", ipstr);
    }

    freeaddrinfo(res);
    WSACleanup();
    return 0;
}

Linux系统

在Linux系统中,可以使用getaddrinfo函数来获取本地IP地址。

代码语言:txt
复制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netdb.h>

int main() {
    char hostname[256];
    if (gethostname(hostname, sizeof(hostname)) != 0) {
        perror("gethostname");
        return 1;
    }

    struct addrinfo hints, *res, *ptr;
    memset(&hints, 0, sizeof(hints));
    hints.ai_family = AF_INET; // 使用IPv4
    hints.ai_socktype = SOCK_STREAM;

    int status = getaddrinfo(hostname, NULL, &hints, &res);
    if (status != 0) {
        fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(status));
        return 1;
    }

    for (ptr = res; ptr != NULL; ptr = ptr->ai_next) {
        struct sockaddr_in *ipv4 = (struct sockaddr_in *)ptr->ai_addr;
        char ipstr[INET_ADDRSTRLEN];
        inet_ntop(AF_INET, &(ipv4->sin_addr), ipstr, INET_ADDRSTRLEN);
        printf("Local IP address: %s\n", ipstr);
    }

    freeaddrinfo(res);
    return 0;
}

基础概念

  • IP地址:互联网协议地址,用于标识网络中的设备。
  • 内网IP地址:通常指的是私有IP地址,如192.168.x.x或10.x.x.x等,这些地址在公共互联网上不唯一,但在局域网内是唯一的。

优势

  • 安全性:内网IP地址对外不可见,有助于保护内部网络的安全。
  • 资源管理:便于局域网内的资源管理和访问控制。

类型

  • 私有IP地址:包括A类(10.0.0.0到10.255.255.255)、B类(172.16.0.0到172.31.255.255)和C类(192.168.0.0到192.168.255.255)。

应用场景

  • 家庭网络:路由器分配给各个设备的IP地址。
  • 企业网络:内部服务器和工作站的IP地址。
  • 数据中心:服务器集群的内部IP地址。

可能遇到的问题及解决方法

  1. 无法获取IP地址
    • 原因:可能是网络配置问题或API调用失败。
    • 解决方法:检查网络连接,确保网络适配器正常工作,并重新运行程序。
  • 获取到的IP地址不是内网地址
    • 原因:可能获取到了公网IP地址或其他网络的IP地址。
    • 解决方法:确保程序中指定使用IPv4地址,并且排除虚拟网络接口。

通过上述代码和解释,你应该能够在C语言中成功获取内网IP地址,并理解相关的基础概念和应用场景。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

内网IP地址泄露

0x01 漏洞描述 - 内网IP地址泄露 - 内网 IP 通常显现在 Web 应用程序/服务器所生成的错误消息中,或显现在 HTML/JavaScript 注释和部分页面跳转链接中。...通过网站信息收集,发现其内网使用的 IP 地址(例如:内网 IP 地址段、IP 路由等等),可以帮助攻击者进行旨在渗透组织内部基础设施的网络层攻击。...内部 IP 定义为下列 IP 地址范围内: A类地址范围【10.0.0.0—10.255.255.255】 B类地址范围【172.16.0.0–172.31.255.555】 C类地址范围【192.168.0.0...测试发现网站的 JS 资源文件内容泄露了内网 IP 地址。 测试发现网站的页面跳转 URL 地址泄露了内网 IP 地址。...删除携带内网 IP 地址的页面,并制定完善的安全编码策略,并且及时检查存在的页面代码是否包含内部 IP 地址问题。

4.7K10
  • iOS 获取 IP 地址方法iOS 获取 IP 地址方法

    一直以来我们获取IP地址方法都是直接百度一查,或者老代码里就已经存在这部分代码然后直接使用。...今天归纳一下常见的两种方法以及如何选择: 方式一: #import #import #import #import...在Xcode 9和之后更高版本中,你可以使用这个检查来检测从一个错位的指针读取或写入,或者当你创建一个错位的引用时,如果一个指针的地址不是其类型对齐的倍数,那么它就会出现错位。...解除一个错位的指针有未定义的行为,并可能导致崩溃或性能下降。 在序列化或反序列化数据的代码中,经常发生违反对齐方式的情况。通过使用保留数据对齐的序列化格式来避免这个问题。...所以综上还是建议使用方式二来获取ID地址(都是本地地址),要获取公网地址可以使用淘宝的API: - (NSString *)getNetworkIPAddress { //方式一:淘宝api

    7.7K21

    图解 Kubernetes Pod 如何获取 IP 地址

    本文就介绍了各种网络组件在 Kubernetes 集群中是如何交互的,以及如何帮助每个 Pod 都能获取 IP 地址。...Kubernetes 网络模型的核心要求之一是每个 Pod 都拥有自己的 IP 地址并可以使用该 IP 地址进行通信。...很多人刚开始使用 Kubernetes 时,还不清楚如何为每个 Pod 分配 IP 地址。他们了解各种组件如何独立工作,但不清楚这些组件如何组合在一起使用。...例如,他们了解什么是 CNI 插件,但是不知道它们是如何被调用的。本文就介绍了各种网络组件在 Kubernetes 集群中是如何交互的,以及如何帮助每个 Pod 都获取 IP 地址。...在容器情况下,容器的 CRI 插件调用 CNI 配置中指定的 CNI 插件来配置 Pod 网络。所有这些都会影响 Pod 获取 IP地址。

    2.2K20

    Kubernetes Pod 是如何获取 IP 地址的?

    Kubernetes 网络模型的核心要求之一是每个 Pod 都拥有自己的 IP 地址并可以使用该 IP 地址进行通信。...很多人刚开始使用 Kubernetes 时,还不清楚如何为每个 Pod 分配 IP 地址。他们了解各种组件如何独立工作,但不清楚这些组件如何组合在一起使用。...例如,他们了解什么是 CNI 插件,但是不知道它们是如何被调用的。本文就介绍了各种网络组件在 Kubernetes 集群中是如何交互的,以及如何帮助每个 Pod 都获取 IP 地址。...CNI 插件是遵循 CNI 规范的可执行文件。 为节点子网分配 Pod IP 地址 如果要求所有 Pod 具有 IP 地址,那么就要确保整个集群中的所有 Pod 的 IP 地址是唯一的。...在容器情况下,容器的 CRI 插件调用 CNI 配置中指定的 CNI 插件来配置 Pod 网络。所有这些都会影响 Pod 获取 IP地址。

    38820

    获取本机IP地址(自动获取不了ip地址怎么解决)

    文章目录 获取本机IP地址的方法总结 一、Windows电脑 获取本机 IP 地址 1.命令行获取 2.使用网络状态查看IP地址 二、Mac 电脑获取本机 IP 地址 1. mac电脑要输入**ifconfig...** 获取本机IP地址的方法总结 一、Windows电脑 获取本机 IP 地址 1.命令行获取 第一步:在任意位置同时按下 windows键 + r键, 第二步:回车键 或者 点击确定...第三步:输入ipconfig 然后回车 箭头所指的位置就是你本机的IP咯~ 2.使用网络状态查看IP地址 第一步:进入“网络和共享中心”(在控制面板可以进入,右单击左下角那个网络图标也可以进入...),然后再点击已链接的网络,如图 第二步:完成第一步后,就进入了“网络连接状态”窗口,点击“详细信息” 第三步:在详细列表里我们就可以看到网络的详细IP配置信息,如图 二、Mac...电脑获取本机 IP 地址 1. mac电脑要输入ifconfig 注意: 一个是p,一个是f 注意: 一个是p,一个是f 注意: 一个是p,一个是f 圈起来的位置就是你本机的IP咯~ 发布者

    11K30

    如何优雅的获取 Mac OS 系统 IP 地址

    比如,在获取电脑 IP 地址的时候,windows 电脑使用 ipconfig 命令就能非常方便的获取。但是,在苹果电脑上,使用类似的命令工具 ifconfig 却不那么方便了。...因为系统会打印出很多无用的网卡信息,那么我们如何能够在 Mac 系统上优雅的获取 IP 地址呢?这就是我们今天想要介绍的内容。...正文 我们都知道,在 windows 电脑上使用 ipconfig 命令就能非常方便的获取本机的 IP 地址。Mac 上也有类似的命令工具———— ifconfig,但是并不是很好用。...终极命令: ifconfig | grep "inet " | grep -v 127.0.0.1 让我看一下执行效果: 完美,言简意赅,直接打印了我们想要的 IP 地址信息:192.168.3.16...结尾 哈哈,直到今天,终于知道如何在苹果电脑上优雅的用命令行获取 IP 地址信息了,感兴趣的小伙伴,自己赶紧复制粘贴命令试试吧!

    3.1K00

    如何获取QQ微信好友的IP地址

    通过监控网络通讯过程中的数据包,从而捕获QQ/微信好友的IP地址,这早已不是秘密,而这种方式依然有效。 在网络世界里,有了IP地址,就可以获取大概的地理位置。...如果对方使用公司网络/家庭WiFi,定位IP基本是比较准确的,但是如果手机使用4G/代理,或是开启了虚拟定位,那么结果就会存在比较大的偏差。...2、获取QQ好友IP地址 当我与好友发起语音/视频通话,无需接听就可以获取ip地址。通过排除一些干扰项,很快可以确定IP:218.xxx.xxx.92,从而准确定位到好友位置。 ?...3、获取微信好友IP地址 当我与好友微信发起语音聊天,需好友接听以后,就可以获取到IP地址。可以发现,同样可以获取到IP:218.xxx.xxx.92。 ?...你所使用的每一款社交软件,可能正在泄露你的隐私,不要随意添加陌生人为好友,不要接陌生人语音,不要给别人侵犯我们隐私的机会。

    21.1K20

    获取IP地址的途径有哪些?要如何保护IP地址不被窃取?

    图片电脑的IP地址是互联网分配给每台电脑在网络里的标识,它是唯一的,只要知道了某台电脑的IP地址我们就可以知道它在网络里的相对位置,可以通过一些技术手段对此电脑进行攻击或者潜入该电脑窃取信息。...网上的一些恶意的用户对其它用户的攻击首先就是要取得其它用户的IP地址。那么,在网络上一些常见的获IP地址的途径有哪些?我们又该如何预防并保护我们的IP地址信息不被窃取呢?...常见的追踪IP地址的途径有:一.利用IP探测器追踪用户的IP。...我们在进行网络文件传输、利用聊天软件聊天都有可能会将本机的IP地址暴露于IP探测器的扫描之下,这样一些恶意用户一旦掌握你上网的IP,就非常容易查到你了。二.利用COOKIE。...图片要防止这种情况发生,可以通过以下几种手段来保护IP地址不被窃取。一.

    1.6K20

    带你搞懂Kubernetes Pod 如何获取 IP 地址

    Kubernetes 网络模型的核心要求之一是每个 Pod 都应该有自己的 IP 地址,并且集群中的每个 Pod 都应该能够使用这个 IP 地址与其进行通信。...同一主机上的容器 在同一主机上运行的容器可以通过其 IP 地址相互通信的方式之一是通过 Linux 桥。...为 Pod IP 地址的节点分配子网 如果所有 Pod 都需要有一个 IP 地址,那么确保整个集群中的所有 Pod 都具有唯一的 IP 地址非常重要。...地址管理)插件从 - 中返回容器的 IP 地址,并将subnet分配的 IP 存储在主机上本地指定的目录下。...节点上的 Pod 会根据 podCIDR 中的子网值分配一个 IP 地址。由于所有节点上的 podCIDR 都是不相交的子网,因此它允许为每个 pod 分配唯一的 IP 地址。

    42510
    领券