精华内容
下载资源
问答
  • 不过其中有一个很关键的步骤是获取当前设备的ip地址,window版的函数不能直接拿来用了。 本来很简单的一件事,由于公司许多机器Linux版本不同,机器的网卡数量也不一样,本来在自己的机器测试完没问题,拿给别人...

    过年之前,有一个任务是将原来的windows工具客户端改写一个Linux版本,对于python来说,很好移植。不过其中有一个很关键的步骤是获取当前设备的ip地址,window版的函数不能直接拿来用了。

    本来很简单的一件事,由于公司许多机器的Linux版本不同,机器的网卡数量也不一样,本来在自己的机器测试完没问题,拿给别人一用就出现各种问题,适配完,换了机器又出现新的问题,导致前前后后竟然改了四种方法。

    思路无非就是通过获取linux命令的输出结果来解析出每个ip,试过很多命令加正则表达式的组合,实现是肯定可以实现,但是越弄越复杂,感觉不够优雅,而且不能保证适配所有版本的系统,最后竟然在一篇博客发现了一个命令只需要一行代码,当时的心情真的是哭笑不得。这里记录一下,以备不时之需。

    命令:

    hostname -I

    命令输出:

    202.196.1.0 202.196.1.1

    程序:

    def getIPAddrs(self):
        p = Popen("hostname -I", shell=True, stdout=PIPE)
        data = p.stdout.read() # 获取命令输出内容
        data = str(data,encoding = 'UTF-8') # 将输出内容编码成字符串
        ip_list = data.split(' ') # 用空格分隔输出内容得到包含所有IP的列表
        if "\n" in ip_list: # 发现有的系统版本输出结果最后会带一个换行符
            ip_list.remove("\n")
        print(ip_list)
        return ip_list

    输出结果:

    [202.196.1.0, 202.196.1.1]


    之前用的方法(Linux):

     def getIPAddrsV2(self):
         p = Popen("ifconfig | grep 'inet ' | grep -v '127.0.0.1' | awk '{print $2}'", shell=True, stdout=PIPE)
         data = p.stdout.read()
         data = str(data,encoding = 'UTF-8')
         ip_list = data.split('\n')
         ip_list.remove("")
         ip_list2 = []
         for ip in ip_list:
             if ":" in ip:
                 ip_list2.append(ip.split(":")[-1])
             else:
                 ip_list2.append(ip)
         print(ip_list2)
         return ip_list2
    
     def getIPAddrsV3(self):
         import psutil
         netcard_info = []
         info = psutil.net_if_addrs()
         for k, v in info.items():
             for item in v:
                 if item[0] == 2 and not item[1] == '127.0.0.1':
                     # netcard_info.append((k, item[1]))
                     netcard_info.append( item[1])
         return netcard_info
    
     def getIPAddrsV4(self):
         import fcntl
         import struct
         ifname = b'enp0s31f6' # 网卡名字
         ip_list = []
         s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
         ip = socket.inet_ntoa(fcntl.ioctl(s.fileno(),0x8915,struct.pack(b'256s', ifname[:15]))[20:24])
         ip_list.append(ip)
         return ip_list

    之前用的方法(Windows):

    '''获取pc的IPv4地址'''
    def getIPAddrs(self):
        ip_list = socket.gethostbyname_ex(socket.gethostname())
        for ips in ip_list:
            if type(ips) == list and len(ips) != 0:
                IPlist = ips
        return IPlist
    
     def getIPAddrsV2(self):
         p = Popen('ipconfig|findstr IPv4', shell=True, stdout=PIPE)
         data = p.stdout.read().decode(encoding='gb2312')
         IPlist = []
         splitlist = re.split('[\r:]', data)
         for eachpart in splitlist:
             if '.' in eachpart and 'IP' not in eachpart:
                 IPlist.append(eachpart.strip())
         return IPlist
    
    

     

    展开全文
  • 熟悉Linux命令行的童鞋都知道,ifconfig命令可以列出当前机器所有网络设备节点对应的IP地址,如下示例所示; 我们在实际的编程代码中,也需要通过代码来获取本地的IP地址,那么有没有办法,直接在代码中调用...

    熟悉Linux命令行的童鞋都知道,ifconfig命令可以列出当前机器所有网络设备节点对应的IP地址,如下示例所示;

    我们在实际的编程代码中,也需要通过代码来获取本地的IP地址,那么有没有办法,直接在代码中调用【ifconfig】命令行来获取本地的IP地址呢?

    答案肯定是有的,本文将给你正确的答案,请按下面的示例代码:

    #include <stdio.h>
    #include <stdlib.h>
    
    int shell_cmd_excute(const char *cmd, char *result, int size)
    {
        int ret;
        FILE *fp = NULL;
    
        fp = popen(cmd, "r");
        if (!fp) {
            perror("popen error: ");
            ret = -1;
            goto exit_entry;    
        }
    
        ret = fread(result, 1, size, fp);       
        if (ret <= 0) {
            perror("fread error: ");
            ret = -2;
            goto exit_entry;
        }
        if (ret > 1 && ret < size && (result[ret-1] == '\r' || result[ret-1] == '\n')) {
            result[ret-1] = '\0';
        }	    
        ret = 0;
    
    exit_entry:
        if (fp) {
            fclose(fp);    
        }
        return ret;	
    }
    
    int get_local_ip_by_ifconfig(const char *interface, char *ip, int size)
    {
        int ret;
        char cmd[128];    
    
        snprintf(cmd, sizeof(cmd), "ifconfig %s | sed -nr 's/.*inet (addr:)?(([0-9]*\\.){3}[0-9]*).*/\\2/p'", interface);
        printf("shell cmd: %s\n", cmd);
    
        ret = shell_cmd_excute(cmd, ip, size);
        return ret;
    }
    
    int main(int argc, const char **argv)
    {
        int ret;
        const char *interface;
        char local_ip[128];
    
        if (argc < 2) {
            printf("Error param input !\n");
            printf("Usage: %s [interface]\n", argv[0]); 
            printf("[interface]: network logic interface, like eth0/ppp0/wlan0/lo ...\n");  
    	exit(-1);     
        }
    
        interface = argv[1];
        ret = get_local_ip_by_ifconfig(interface, local_ip, sizeof(local_ip));
        if (!ret) {
            printf("Get local ip OK, ip = %s\n", local_ip);    
        } else {
            printf("Get local ip FAIL !\n");
        }
    
        return ret;
    }

    代码编译:

    gcc -o ifconfig_ip ifconfig_ip.c 

    代码运行测试:

    因笔者的Linux环境只有eth0和lo这2个网络设备节点,没有wlan0、ppp0这两个网络设备节点,所以wlan0节点和ppp0这2个节点测试报错了,而eth0和lo可以得到正确的IP地址,与文章开头的ifconfig输出是保持一致的。

    以上测试代码是笔者在平时工作中积累的代码,可直接用于生产环境。使用过程,若发现问题,欢迎随时交流讨论,互相提高。谢谢。


    版权申明:本文为博主原创文章,转载请注明出处!https://blog.csdn.net/szullc/article/details/84946073

    原创作者:李路昌

    电子邮箱:recan.szu@foxmail.com

    展开全文
  • 纠结很久,觉得还是要学习下linux,以及linux下服务器编程,不说了,下载CentOS7的ISO...于是乎,ifconfig查找当前机器Ip地址,额,没有ip,查了下发现CentOS7默认没有启用网卡,执行命令cd /etc/sysconfig/network-s...

    纠结很久,觉得还是要学习下linux,以及linux下服务器编程,不说了,下载CentOS7的ISO镜像文件,在VMware上安装,搞定!

    真心小白,执行下g++ 命令,提示找不到命令,这是我这个版本的CentOS没有安装g++的缘故啊。

    于是乎,ifconfig查找当前机器Ip地址,额,没有ip,查了下发现CentOS7默认没有启用网卡,执行命令cd /etc/sysconfig/network-scripts打开目录,vi  ifcfg-ens33打开该文件,将ONBOOT=no修改成yes。如下图

    下面就要执行重启网络服务的命令了,systemctl restart network。网有了。。。。

    yum install gcc-c++,不是yuminstall g++!!!!

    g++ 安装完毕!

    下面写了程序员的第一个都爱写的程序 hello world!  执行 vi A.cpp,新建一个文件,写程序如下:


    输入wq 保存退出该文件!

    执行命令 g++ A.cpp  生成 a.o

    ./a.o 显示除了 hello world!  

    good!

    展开全文
  • 可以采用机器(电脑)唯一码 + 上传IP + 当前时间戳 + GUID ( + 随机数),然后MD5做为文件名。机器唯一码有电脑的CPU信息和MAC地址,这两个信息需要在linux或unix系统下才能获取吧。 //获取电脑的CPU信息function...

     

    可以采用机器(电脑)唯一码 + 上传IP + 当前时间戳 + GUID ( + 随机数),然后MD5做为文件名。机器唯一码有电脑的CPU信息和MAC地址,这两个信息需要在linux或unix系统下才能获取吧。

    //获取电脑的CPU信息
    function OnlyU(){
            $a = '';
            $b = array();
            if(function_exists('exec')){
                    if(mailto:!@exec( /all",$b)){
                            return false;
                    }
            }elseif(function_exists('system')){
                    ob_start();
                    if(mailto:!@system( /all")){
                            return false;
                    }else{
                    }
                    $b = ob_get_contents();
                    ob_end_clean();
                    $b = explode("\n",$b);//print_r($b);
                    array_pop($b);
            }else{
                    return false;
            }

            $all = sizeof($b);
            for($i = 0; $i < $all; $i++){
                    if(strpos($b[$i],"Description") !== false){
                            if(strpos($b[$i+1],"Physical Address") !== false){
                                    $c = explode(":",$b[$i+1]);
                                    $a = trim($c[1]);
                                    break;
                            }
                    }
            } // End for
            return empty($a)?false:$a;
    } // End function OnlyU


    //获取网卡的MAC的地址

    function getMAC() {
     @exec("ipconfig /all",$array);
     for($Tmpa;$Tmpa<count($array);$Tmpa++){
      if(eregi("Physical",$array[$Tmpa])){
       $mac=explode(":",$array[$Tmpa]);
       return $mac[1];
      }
     }
    }

    // 生成guid字符串
    function guid($separated = true) {
        if (function_exists ( 'com_create_guid' )) {
            $charid = substr ( strtolower ( com_create_guid () ), 1, - 1 );
            if (! $separated)
                return str_replace ( '-', '', $charid );
            else
                return $charid;
        } else {
            // 生成一个随机的md5串, 然后通过分割来 获得guid
            mt_srand ( ( double ) microtime () * 10000 );
            $charid = md5 ( uniqid ( rand (), true ) );
        }
       
        if (! $separated) {
            return $charid;
        }
        $hyphen = chr ( 45 );
        $uuid = substr ( $charid, 0, 8 ) . $hyphen . substr ( $charid, 8, 4 ) . $hyphen . substr ( $charid, 12, 4 ) . $hyphen . substr ( $charid, 16, 4 ) . $hyphen . substr ( $charid, 20, 12 );
        return $uuid;
    }

    转载于:https://www.cnblogs.com/wangluochong/p/4337176.html

    展开全文
  • 1.获取当前脚本路径 2.判读字符串变量为空和不为空 ...8.获取当前机器IP 9.程序暂停一段时间 10.字符串截取与替换 11.发送邮件 12.读写数据库 13.压缩与解压缩 14.判断...
  • linux命令netstat

    2010-06-02 00:48:12
     NBTSTAT命令:用于查看当前基于NETBIOS的TCP/IP连接状态,通过该工具你可以获得远程或本地机器的组名和机器名。虽然用户使用ipconfig/winipcfg工具可以准确地得到主机的网卡地址,但对于一个已建成的比较大型的...
  • linux.chm文档

    2015-07-07 06:37:39
    rpm -qi package_name 获取一个已安装包的特殊信息 rpm -qg "System Environment/Daemons" 显示一个组件的rpm包 rpm -ql package_name 显示一个已经安装的rpm包提供的文件列表 rpm -qc package_name 显示一个已经...
  •  1.1 hostname 查看当前主机名  1.2 vim /etc/sysconfig/network hostname=主机名  1.3 vim /etc/hosts IP 主机名  1.4 vim /etc/hostname 主机名  1.5 reboot 重启机器 2.获取MAC地址  2.1 编辑虚拟机设置 -...
  • tftp -i 自己IP(用肉机作跳板时这用肉机IP) get server.exec:server.exe 登陆后,将“IP”的server.exe下载到目标主机c:server.exe 参数:-i指以二进制模式传送,如传送exe文件时用,如不加-i 则以ASCII模式(传送...
  • linux主机在发包前,先判断目标IP是否跟自己是同一个网段的,如果是 ,则发送ARP请求,获取目标MAC,否则,获取网关MAC,将包发送给网关。 如果没有配置网关,包发不出去。网关要和当前网络至少一个网卡是同一个网段...
  • 入门学习Linux常用必会60个命令实例详解doc/txt

    千次下载 热门讨论 2011-06-09 00:08:45
    ◆ 网络操作命令:ifconfig、ip、ping、netstat、telnet、ftp、route、rlogin、rcp、finger、mail、 nslookup; ◆ 系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo ps、who; ◆ 其它...
  • (1) dolphinschduler安装的机器上有 linux账号 dolphinscheduler,这个账号是sudoer,且免密 (2) 任务执行时,当前用户是安全中心下的某个租户,当这个租户=dolphinscheduler时,...
  • Windows:使用 ipconfig 命令查看当前机器IP地址。 进入ncat所在文件地址,使用ncat命令打开监听 Linux反弹连接win: 二、Linux获得Windows Shell 在Linux终端输入命令ifconfig查看虚拟机Linux的IP号。 然后输入...
  • Windows:使用 ipconfig 命令查看当前机器IP地址。 进入ncat所在文件地址,输入命令:ncat.exe -l -p 5223。 Linux:在命令行终端输入命令:nc windows主机的IP地址 5223 -e /bin/sh。-e反向连接Windows。 一个回...
  • Web渗透测试攻略(上)

    2021-02-26 13:51:06
    系统启动后,可以用ifconfig命令获取当前ip地址:这个例子中,ip地址就是10.0.2.15.在整个训练中,我们用来模拟受害机器的主机名叫vulneralble.你可以用ip地址来代替主机名,或者你可以在host文件中添加主机名和对应...
  • Vue项目的真机测试

    2019-03-01 17:33:42
    在命令行运行ifconfig(Linux系统)或是ipconfig(Windows系统),我们要获取当前机器的一个IP地址,可以看到,当前这台机器的内网的一个IP地址为192.168.43.50: 在浏览器里,我们输入192.168.43.50,也是指的这...
  • Kali Linux自带Wireshark工具使用介绍: ...这里注意:需要选择混杂模式,获取机器所有以太网连接包 作用:不发送给当前IP的数据包也会抓取 同时我们观察到,下边这个捕获过滤器,这个有什么用呢? 通常我们...
  • -- reducer获取数据的方式 --> <name>yarn.nodemanager.aux-services <value>mapreduce_shuffle 3.2将hadoop添加到环境变量 vim /etc/proflie export JAVA_HOME=/usr/java/jdk1.7.0_65 export ...
  • 诞生 很早的时候,我们使用BTrace排查问题,在... 技术专家A和B平时没有对应机器的权限,但只要网络能访问,他们可以通过指定ip:port直接访问目标机器的JVM进程,仿佛在本地一般 标签:greys
  • 1.2.7 请分析 MaxCompute 产品与分布式技术的关系、当前大数据计算平台类产品的市场现状和发展趋势 1.2.8 对大数据平台中的元数据管理是怎么理解的,元数据收集管理体系是怎么样的,会对大数据应用有什么样的影响 ...
  • 计算机网络基础 - 计算机网络发展史 / “TCP-IP”模型 / IP地址 / 端口 / 协议 / 其他相关概念 网络应用模式 - “客户端-服务器”模式 / “浏览器-服务器”模式 基于HTTP协议访问网络资源 - 网络API概述 / 访问URL /...
  • React学习笔记_利用cors实现ajax跨域_Tomcat 获取跨域Authorization React学习笔记_ReactRedux应用使用AsyncAwait React学习笔记_动态注入reducer React学习笔记_export和import总结 React学习笔记_安装...
  • SSO-WebDemo

    2013-08-12 20:25:57
    如果你部署demo1和demo2的机器没有域名,请输入IP地址或主机名(如localhost),但是如果使用IP地址或主机名也就意味着demo1和demo2需要部署到一台机器上了。设置完后,根据你所选择的J2EE容器,可能需要将SSOAuth这...
  • 数据集-当前最佳结果、CoupletAI - 基于CNN+Bi-LSTM+Attention 的自动对对联系统、抽象知识图谱、MiningZhiDaoQACorpus - 580万百度知道问答数据挖掘项目、brat rapid annotation tool: 序列标注工具、大规模中文...
  •  如果不带任何参数,chkdsk 将显示当前驱动器中的磁盘状态。 drive: 指定要 chkdsk 检查的驱动器。 /p 即使驱动器不在 chkdsk 的检查范围内,也执行彻底检查。该参数不对驱动器做任何更改。 /r 找到坏扇区并...
  • 根据Netcraft在1999年10月的报告,有931122个域和321128个IP地址利用PHP技术。 1.2 PHP的先进之处 应用PHP有许多好处。当然已知的不利之处在于PHP由于是开放源码项目,没有什么商业支持,并且由此而带来的执行速度...
  • 中国独立开发者项目列表 聚合所有中国独立开发者的项目 程序员版点这里: 程序员版的项目需要用命令行或写一点代码。主版面(这里)是给普通用户用的,打开即用,无需命令行或编程基础 1. 为什么有这个表 ...

空空如也

空空如也

1 2
收藏数 28
精华内容 11
关键字:

linux获取当前机器ip

linux 订阅