获取本地IP

本文提供了一段C++代码示例,展示了如何通过调用Windows Socket API来获取本地计算机的IP地址。此方法适用于Windows平台,利用gethostname和gethostbyname函数组合使用来检索主机名及对应的IP地址。

获取本地IP地址,直接上代码:

BOOL GetLocalPCIPAdrdr(CString& csIPAddr)
{
    BOOL bRet = FALSE;
    char szHostName[128] = {0};
    int iRet;
    WSADATA     wsaData;
    struct hostent *pHost;
    int i;
    LPCSTR psz;

    WSAStartup(MAKEWORD(2, 2), &wsaData);
    iRet = gethostname(szHostName , 128);
    if(iRet == 0)
    {
        pHost = gethostbyname(szHostName);
        for(i=0; pHost!=NULL&&pHost->h_addr_list[i]!=NULL;i++)
        {
            psz = inet_ntoa(*(struct in_addr*)pHost->h_addr_list[i]);
        }
        csIPAddr = psz;
        bRet = TRUE;
    }

    return bRet;
}


获取本地 IP 地址是网络编程中常见的需求,具体实现方法取决于编程语言和操作系统环境。以下是一些主流语言和平台下的实现方式。 ### 1. Linux C 语言获取本地 IP 地址 在 Linux 环境下,若已建立一个 TCP 连接,可以通过 `getsockname()` 函数获取本地 IP 地址。其核心代码如下: ```c struct sockaddr_in localAddr; socklen_t len = sizeof(localAddr); bzero(&localAddr, sizeof(localAddr)); if (getsockname(s, (struct sockaddr*)&localAddr, &len) < 0) { return -1; } char buf[INET_ADDRSTRLEN]; char *localIp = inet_ntop(AF_INET, &localAddr.sin_addr, buf, sizeof(buf)); printf("本地IP为 %s\n", buf); return 0; ``` 此方法适用于已经建立连接的场景,例如在反弹 Shell 中,可以通过已有连接获取本机 IP 地址[^2]。 ### 2. Golang 获取本地 IP 地址 在 Golang 中,可以通过创建一个 UDP 连接并调用 `LocalAddr()` 方法获取本地 IP 地址。由于 UDP 是无连接的协议,只需指定一个合法的目标地址即可触发本地地址获取。示例代码如下: ```go package main import ( "fmt" "net" "strings" ) func main() { conn, err := net.Dial("udp", "8.8.8.8:53") if err != nil { panic(err) } defer conn.Close() addr := conn.LocalAddr().(*net.UDPAddr) ip := strings.Split(addr.String(), ":")[0] fmt.Println(ip) } ``` 该方法利用了 UDP 协议的特性,确保能够获取到当前主机的 IP 地址[^3]。 ### 3. Windows获取本地 IP 地址Windows 平台下,可以通过执行 `ipconfig` 命令并解析其输出来获取本地 IP 地址。以下是一个 C++ 类的简化实现示例: ```cpp class CmdExc { public: CmdExc(std::string cmd, std::string mode = "rt"); ~CmdExc(); std::string getOutput() const; std::string getLocalIP(std::string ipconfig_content); private: std::string m_strOutput__; FILE* m_fp__; }; ``` 通过调用 `ipconfig` 并解析输出内容,可以提取出本地 IP 地址信息[^4]。 ### 4. Linux 下使用 `getaddrinfo()` 获取本地 IP 地址 虽然 `getaddrinfo()` 主要用于将主机名和服务名映射为地址,但在某些特定情况下也可以尝试用于获取本地 IP 地址。不过需要注意的是,该方法通常返回的是本地回环地址 `127.0.0.1`,因此在实际应用中需谨慎使用[^1]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值