精华内容
下载资源
问答
  • 在进行Linux网络编程时,经常用到本机IP地址。本文罗列一下常见方法,以备不时之需。获取本机IP地址,是一个相当灵活的操作,原因是网络地址的设置非常灵活而且都是允许用户进行个性化设置的。比如一台计算机上可以...

    代码编译运行平台:Linux 64bits+g++(-m64),-m64表示生成64bits的程序。

    在进行Linux网络编程时,经常用到本机IP地址。本文罗列一下常见方法,以备不时之需。

    获取本机IP地址,是一个相当灵活的操作,原因是网络地址的设置非常灵活而且都是允许用户进行个性化设置的。比如一台计算机上可以有多块物理网卡或者虚拟网卡,一个网卡上可以绑定多个IP地址,用户可以为网卡设置别名,可以重命名网卡。用户计算机所在网络拓扑结构未知,主机名设置是一个可选项并且同样可以为一个计算机绑定多个主机名等,这些信息都会有影响。脱离了网络连接,单独的网络地址没有任何意义。编程中遇到必须获取计算机IP的场景,应该考虑将这一选项放到配置文件中,由用户自己来设置。

    参考网络和书本,编程获取本机IP地址大约有以下几种方法。

    方法一:

    Linux 下 可以使用ioctl()函数以及结构体 struct ifreq和结构体struct ifconf来获取网络接口的各种信息。

    具体过程是先通过ictol获取本地的所有接口信息,存放到ifconf结构中,再从其中取出每个ifreq表示的ip信息(一般每个网卡对应一个IP地址,如:”eth0…、eth1…”)。

    先了解结构体 struct ifreq和结构体struct ifconf:

    //ifconf通常是用来保存所有接口信息的

    //if.h

    struct ifconf

    {

    int ifc_len; /* size of buffer */

    union

    {

    char *ifcu_buf; /*input from user->kernel*/

    struct ifreq *ifcu_req; /* return from kernel->user*/

    } ifc_ifcu;

    };

    #define ifc_buf ifc_ifcu.ifcu_buf /*buffer address */

    #define ifc_req ifc_ifcu.ifcu_req /*array of structures*/

    //ifreq用来保存某个接口的信息

    //if.h

    struct ifreq {

    char ifr_name[IFNAMSIZ];

    union {

    struct sockaddr ifru_addr;

    struct sockaddr ifru_dstaddr;

    struct sockaddr ifru_broadaddr;

    short ifru_flags;

    int ifru_metric;

    caddr_t ifru_data;

    } ifr_ifru;

    };

    #define ifr_addr ifr_ifru.ifru_addr

    #define ifr_dstaddr ifr_ifru.ifru_dstaddr

    #define ifr_broadaddr ifr_ifru.ifru_broadaddr

    如果本机的IP地址绑定在第一块网卡上,指定网卡名称,无需获取所有网卡的信息,即可获取,见如下函数:

    string getLocalIP(){

    int inet_sock;

    struct ifreq ifr;

    char ip[32]={NULL};

    inet_sock = socket(AF_INET, SOCK_DGRAM, 0);

    strcpy(ifr.ifr_name, "eth0");

    ioctl(inet_sock, SIOCGIFADDR, &ifr);

    strcpy(ip, inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));

    return string(ip);

    }

    如果想获取所有网络接口信息,参见如下代码:

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    #include

    int main(int argc,char* argv[])

    {

    int sockfd;

    struct ifconf ifconf;

    struct ifreq *ifreq;

    char buf[512];//缓冲区

    //初始化ifconf

    ifconf.ifc_len =512;

    ifconf.ifc_buf = buf;

    if ((sockfd =socket(AF_INET,SOCK_DGRAM,0))<0)

    {

    perror("socket" );

    exit(1);

    }

    ioctl(sockfd, SIOCGIFCONF, &ifconf); //获取所有接口信息

    //接下来一个一个的获取IP地址

    ifreq = (struct ifreq*)ifconf.ifc_buf;

    printf("ifconf.ifc_len:%d\n",ifconf.ifc_len);

    printf("sizeof (struct ifreq):%d\n",sizeof (struct ifreq));

    for (int i=(ifconf.ifc_len/sizeof (struct ifreq)); i>0; i--)

    {

    if(ifreq->ifr_flags == AF_INET){ //for ipv4

    printf("name =[%s]\n" , ifreq->ifr_name);

    printf("local addr = [%s]\n" ,inet_ntoa(((struct sockaddr_in*)&(ifreq->ifr_addr))->sin_addr));

    ifreq++;

    }

    }

    getchar();//system("pause");//not used in linux

    return 0;

    }

    运行输出:

    0818b9ca8b590ca3270a3433284dd417.png

    方法二:

    如果建立TCP连接的情况下,可以通过getsockname和getpeername函数来获取本地和对端的IP和端口号。前提是已经与对方建立了连接。

    参考代码如下:

    #include

    #include

    #include

    #include

    int main(int argc, char* argv[])

    {

    int fd=socket(AF_INET,SOCK_STREAM,0);//创建本地sock描述符

    struct sockaddr_in servaddr,localaddr,peeraddr;

    socklen_t len;

    //初始化服务端地址并连接

    bzero(&servaddr,sizeof(servaddr));

    servaddr.sin_family=AF_INET;

    servaddr.sin_port=htons(PORT);//PORT自己指定

    char* servIP=”177.56.23.4”;//服务端IP

    inet_pton(AF_INET,servIP,&servaddr.sin_addr);

    if(connect(fd,(struct sockaddr*)&servaddr,sizeof(servaddr))<0)

    {

    cerr<

    return -1;

    }

    char buf[30];

    memset(buf,0,sizeof(buf));

    bzero(&localaddr,sizeof(localaddr));

    getsockname(fd,(struct sockaddr*)&localaddr,&len); //获取本地信息

    cout<

    bzero(&peeraddr,sizeof(peeraddr));

    getpeername(fd,(struct sockaddr*)&peeraddr,&len); //获取对端信息

    cout<

    return 1;

    }

    }

    注意,getaddrinfo()可以完成网络主机中主机名和服务名到地址的映射,但是一般不能用来获取本地IP地址,当它用来获取本地IP地址时,返回的一般是127.0.0.1本地回环地址。

    所需头文件:

    #include

    #include

    #include

    用例如下:

    #include

    #include

    #include

    #include

    #include

    #include

    int main(int argc,char* argv[])

    {

    char host_name[128]={NULL};

    gethostname(host_name, sizeof(host_name));//获取本地主机名称

    printf("host_name:%s\n",host_name);

    struct addrinfo *ailist=NULL,*aip=NULL;

    struct sockaddr_in *saddr;

    char *addr;

    int ret=getaddrinfo(host_name,NULL,NULL,&ailist);

    for(aip=ailist; aip!=NULL; aip=aip->ai_next)

    {

    if(aip->ai_family==AF_INET)

    {

    saddr=(struct sockaddr_in*)aip->ai_addr;

    addr=inet_ntoa(saddr->sin_addr);

    }

    printf("addr:%s\n",addr);

    }

    printf("\n-----------------baidu host info-------------------\n");

    getaddrinfo("www.baidu.com","http",NULL,&ailist);

    for(aip=ailist; aip!=NULL; aip=aip->ai_next)

    {

    if(aip->ai_family==AF_INET)

    {

    saddr=(struct sockaddr_in*)aip->ai_addr;

    addr=inet_ntoa(saddr->sin_addr);

    }

    printf("baidu addr:%s\n",addr);

    }

    getchar();

    return 0;

    }

    使用gcc编译此程序会出现error: dereferencing pointer to incomplete type的错误,使用g++编译通过,程序输出:

    0818b9ca8b590ca3270a3433284dd417.png

    展开全文
  • 在js获取本地IP地址

    2021-06-13 12:41:28
    KARTHIKEYAN.Ayojimbo87提出了一个问题:Get local IP address in node.js,或许与您遇到的问题类似。回答者Aperçunodyou给出了该问题的处理方式:'use strict';var os = require('os');var ifaces = os.network...

    KARTHIKEYAN.Ayojimbo87提出了一个问题:Get local IP address in node.js,或许与您遇到的问题类似。

    回答者Aperçunodyou给出了该问题的处理方式:

    'use strict';

    var os = require('os');

    var ifaces = os.networkInterfaces();

    Object.keys(ifaces).forEach(function (ifname) {

    var alias = 0;

    ifaces[ifname].forEach(function (iface) {

    if ('IPv4' !== iface.family || iface.internal !== false) {

    // skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses

    return;

    }

    if (alias >= 1) {

    // this single interface has multiple ipv4 addresses

    console.log(ifname + ':' + alias, iface.address);

    } else {

    // this interface has only one ipv4 adress

    console.log(ifname, iface.address);

    }

    ++alias;

    });

    });

    // en0 192.168.1.101

    // eth0 10.0.0.101

    希望本文对你有帮助,欢迎支持JavaScript中文网

    展开全文
  • import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.... } } 使用postman测试效果如下图: image.png 然后是控制台相关输入截图如下: image.png 获取本地ip地址完毕。

    1. controller层代码如下:

    package com.txdata.modules.project.controller;

    import com.txdata.common.utils.R;

    import com.txdata.modules.project.service.QueryServiceMeginService;

    import org.springframework.beans.factory.annotation.Autowired;

    import org.springframework.web.bind.annotation.PostMapping;

    import org.springframework.web.bind.annotation.RequestMapping;

    import org.springframework.web.bind.annotation.RestController;

    import javax.management.MalformedObjectNameException;

    import java.net.SocketException;

    @RestController

    @RequestMapping("/query/server")

    public class QueryServiceMeginController {

    @Autowired

    private QueryServiceMeginService queryServiceMeginService;

    /**

    * 查询服务器ip地址和相关信息

    * @return

    */

    @PostMapping("/info")

    public R getInfo() throws MalformedObjectNameException, SocketException {

    return queryServiceMeginService.queryInfo();

    }

    }

    2. service层代码如下:

    package com.txdata.modules.project.service;

    import com.alibaba.fastjson.JSONObject;

    import com.txdata.common.utils.R;

    import org.springframework.stereotype.Service;

    import javax.management.MBeanServer;

    import javax.management.MalformedObjectNameException;

    import javax.management.ObjectName;

    import javax.management.Query;

    import java.lang.management.ManagementFactory;

    import java.net.Inet4Address;

    import java.net.InetAddress;

    import java.net.NetworkInterface;

    import java.net.SocketException;

    import java.util.Enumeration;

    import java.util.Set;

    @Service

    public class QueryServiceMeginService {

    /**

    * 查询服务器ip地址和相关信息

    *

    * @return

    */

    public R queryInfo() throws MalformedObjectNameException, SocketException {

    //得到本机所有的网络接口

    Enumeration allNetInterfaces = NetworkInterface.getNetworkInterfaces();

    JSONObject jsonMap = new JSONObject();

    //循环遍历所有网络接口

    while (allNetInterfaces.hasMoreElements()) {

    //顺序拿取某个网络接口

    NetworkInterface netInterface = allNetInterfaces.nextElement();

    //获得与该网络接口绑定的 IP 地址,一般只有一个

    Enumeration addresses = netInterface.getInetAddresses();

    while (addresses.hasMoreElements()) {

    InetAddress ip = addresses.nextElement();

    if (ip != null && ip instanceof Inet4Address

    && !ip.isLoopbackAddress() //loopback地址即本机地址,IPv4的loopback范围是127.0.0.0 ~ 127.255.255.255

    && ip.getHostAddress().indexOf(":") == -1) {

    System.out.println("网卡接口名称:" + netInterface.getName());

    System.out.println("网卡接口地址:" + ip.getHostAddress());

    System.out.println();

    jsonMap.put("ip", ip.getHostAddress());

    jsonMap.put("interfaceName",netInterface.getName()+"(局域网ip地址)");

    }

    }

    /* MBeanServer beanServer = ManagementFactory.getPlatformMBeanServer();

    Set objectNames = beanServer.queryNames(new ObjectName("*:type=Connector,*"),

    Query.match(Query.attr("protocol"), Query.value("HTTP/1.1")));

    System.out.println(objectNames);

    */

    }

    return R.success(jsonMap);

    }

    }

    使用postman测试效果如下图:

    a300363bbf2e

    image.png

    然后是控制台相关输入截图如下:

    a300363bbf2e

    image.png

    获取本地ip地址完毕。

    展开全文
  • 任何给定的计算机可以具有与多个网卡相关联的多个IP地址.有些/全部/没有一个可能有它们可用的Web服务.您对操作系统的问题可能没有一个单一的答案.如果您的服务器具有简单的单一IP地址配置,那么您可能最好对其进行硬...

    你在这里的问题是这不是一个静态的信息.任何给定的计算机可以具有与多个网卡相关联的多个IP地址.有些/全部/没有一个可能有它们可用的Web服务.您对操作系统的问题可能没有一个单一的答案.

    如果您的服务器具有简单的单一IP地址配置,那么您可能最好对其进行硬编码,这是最简单的选择.如果你想动态地确定它,这里有一些信息,你会希望找到有用的:

    > $_SERVER [‘HTTP_HOST’]包含输入浏览器地址栏的地址,以便访问页面.如果您通过在浏览器中输入(例如)http://192.168.0.1/index.php来访问该页面,$_SERVER [‘HTTP_HOST’]将为192.168.0.1.

    >如果您使用DNS名称访问该页面,则gethostbyname($_ SERVER [‘HTTP_HOST’]);将该DNS名称变成IP地址.

    > $_SERVER [‘SERVER_NAME’]包含在Web服务器配置中配置的名称,因为它是服务器名称.如果你使用这个,你也可以在PHP中硬编码.

    > $_SERVER [‘SERVER_ADDR’]将包含服务器主IP地址的操作系统.这可能是或不是用于访问该页面的IP地址,并且它可能是也可能不是与该Web服务器绑定的IP地址.这主要取决于操作系统和服务器配置.如果服务器有一个IP地址,这可能是一个安全的赌注,尽管有些情况下可能包含127.0.0.1.

    很长的一点是,没有100%可靠的方式来确定Web服务器的有保证的工作IP地址,而不检查发送到Web服务器的信息,以生成您正在创建的页面,其中你说完全失败了它的目的.

    展开全文
  • 小编知道如何查看IP地址命令的原因是因为一位朋友... 今天,我将告诉您如何查看本地ip地址命令.1,开始运行cmd查看ip地址命令映射12. 单击确定后,我们进入了DOS界面查看本地ip地址命令映射23. 检查本地ip地址命令ip...
  • 所以,我试图获取我的机器的IP地址在我的本地网络(应为192.168.178.41)。我的第一个意图是使用这样的东西:InetAddress.getLocalHost().getHostAddress();但它只返回127.0.0.1,这是正确的,但不是非常有用的我。我...
  • 前端获取本地ip地址

    千次阅读 2021-04-29 21:44:02
    在某些场合的情况下 后台可能需要前端电脑的ip 因为每台电脑的ip不一样 所有需要动态获取 翻翻网上写的很多 里面其实是很坑的 因为都是在调用闭包函数 所以执行起来是没有任何问题的 但是 你页面想拿的时候 你是没法...
  • 如何查询电脑本地ip地址

    千次阅读 2021-02-06 14:16:55
    计算机上的ip地址基本上是固定不变的,因此,对电脑而言,想要查询ip地址的方式,基本上也是统一固定的,不管是有几台电脑,都可以用以下方式进行查询,想玩电脑更专业,或者对电脑有需求了解的小伙伴可以跟着下面...
  • char * getLocalIp() { //获取本地ip地址 char szText[256]; int iRet = gethostname(szText,256);//返回0成功,获取本机计算机名 if (iRet) { LOG(info) << "获取本地ip失败"<<std::endl; return...
  • InetAddress ip4 = Inet4Address.getLocalHost(); System.out.println(ip4.getHostAddress());
  • 网上有很多种方法可以获取到本地IP地址。一线常用的有这么些: 枚举本地网卡 using System.Net.NetworkInformation; using System.Net.Sockets; foreach (NetworkInterface netif in NetworkInterface....
  • 本文实例总结了python在windows和linux下获得本机本地ip地址方法。分享给大家供大家参考。具体分析如下:python的socket包含了丰富的函数和方法可以获得本机的ip地址信息,socket对象的gethostbyname方法可以根据...
  • vue项目中使用本地ip地址访问 在vue项目中的package.json文件中修改一行代码 "dev": "webpack-dev-server --host 0.0.0.0 --inline --progress --config build/webpack.dev.conf.js",
  • 在启动项目自动获取本地ip地址 index.js 'use strict'; const devEnv = require('./dev.env'); const path = require('path'); const os = require('os'); ///////////////////获取本机ip//////////////////////...
  • Vue 之获取本地IP地址

    2021-11-16 11:43:42
    var vm = new Vue({ el:"#app", data:{ user:{ "username":"", "passwoed":"", "age":"", "hobby":"", "ip":"" ... //获取本地IP地址 //js 引入 <!-- 获取本机ip
  • //to free ifa 以下是用户Twelve47在获取机器的IP地址以获取所有接口的IPv4和IPv6地址时提供的示例: #include #include #include #include #include #include int main (int argc, const char * argv[]) { struct ...
  • Qt获取本地ip地址

    2021-08-22 20:32:29
    Qt提供相关获取ip地址的类,可以十分方便获取本机ip地址。 QString MainWindow::read_ip_address() { QString ip_address; QList<QHostAddress> ipAddressesList = QNetworkInterface::allAddresses(); for...
  • Mac查看本地ip地址

    2021-02-03 16:33:39
    方法一:系统偏好设置-->网络-->高级-->TCP/IP 方法二:终端输入ifconfig
  • 每台电脑都有其特定的ip地址,有时候由于一些操作需要知道自己电脑的本地ip地址,但是许多用户升级到win10系统之后,却不知道要如何查找本地ip地址,其实方法很简单,下面就给大家带来win10系统下快速查找本地ip...
  • 1. 打开CMD 2. 输入 ipconfig 3. 会弹出TCP/IP配置,包括ip地址,DNS,子网掩码等信息
  • 获取本地服务器IP经常会出现127.0.0.1,0:0:0:0:0:0:0:1,fe80:0:0:0:960:74bd:e1a0:e5b9%11 这些情况,以下代码可解决此问题public static void main(String[] args) {try {Enumeration enumeration = Network...
  • VUE2.0 脚手架搭建项目,如何配置本地IP地址访问项目,详解! 前言:后端同事想访问我VUE本地项目进行自测,然后我就进行了一系列配置 1.首先找到config文件夹目录下的 index.js文件 // Various Dev Server settings...
  • Android获取本地IP

    2021-01-07 20:44:23
    可以通过另一种方式,使用Socket建立连接来获取正在使用的本地ip,代码如下: private String getLocalIp() { Socket socket = null; try { // 这里也可以使用ip,比如使用自己公司服务器的ip和端口 socket = ...
  • js获取本地IP地址

    2021-04-30 12:14:37
    js获取本地IP地址 /** * 获取本地ip地址 * @return {String} IP地址 */ function getIPAdress() { let interfaces = require('os').networkInterfaces(); for (var devName in interfaces) { var iface = ...
  • 本文实例讲述了python批量生成本地ip地址的方法。分享给大家供大家参考。具体分析如下:这段代码用于在本地计算机上生成本地ip地址绑定到网卡,生成的是一个bat的批处理文件,运行此批处理文件,可以通过ipconfig...
  • 原因 一开始忘了加http://导致的,加上就好了
  • 全局安装: npm install http-server -g ip地址: http-server -c-1 可以通过ip+html页面访问

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 854,904
精华内容 341,961
关键字:

本地ip