获取本地ip

using System;
using System.Collections.Generic;
using System.Text;
using System.Net;

namespace TestGetIp
{
    class Program
    {
        static void Main(string[] args)
        {
            //获取本地ip
            string strHostIP = "";
            IPHostEntry oIPHost = Dns.GetHostEntry(Environment.MachineName);
            if (oIPHost.AddressList.Length > 0)
                strHostIP = oIPHost.AddressList[0].ToString();

    
            Console.Write(strHostIP);
        }
    }
}

获取本地 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]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值