zoukankan      html  css  js  c++  java
  • python 标准库获取网络信息

    c语言ioctl定义的常量 /usr/include/x86_64-linux-gnu/bits/ioctls.h

    /* Copyright (C) 1996-2015 Free Software Foundation, Inc.
       This file is part of the GNU C Library.
    
       The GNU C Library is free software; you can redistribute it and/or
       modify it under the terms of the GNU Lesser General Public
       License as published by the Free Software Foundation; either
       version 2.1 of the License, or (at your option) any later version.
    
       The GNU C Library is distributed in the hope that it will be useful,
       but WITHOUT ANY WARRANTY; without even the implied warranty of
       MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
       Lesser General Public License for more details.
    
       You should have received a copy of the GNU Lesser General Public
       License along with the GNU C Library; if not, see
       <http://www.gnu.org/licenses/>.  */
    
    #ifndef _SYS_IOCTL_H
    # error "Never use <bits/ioctls.h> directly; include <sys/ioctl.h> instead."
    #endif
    
    /* Use the definitions from the kernel header files.  */
    #include <asm/ioctls.h>
    
    /* Routing table calls.  */
    #define SIOCADDRT   0x890B      /* add routing table entry  */
    #define SIOCDELRT   0x890C      /* delete routing table entry   */
    #define SIOCRTMSG   0x890D      /* call to routing system   */
    
    /* Socket configuration controls. */
    #define SIOCGIFNAME 0x8910      /* get iface name       */
    #define SIOCSIFLINK 0x8911      /* set iface channel        */
    #define SIOCGIFCONF 0x8912      /* get iface list       */
    #define SIOCGIFFLAGS    0x8913      /* get flags            */
    #define SIOCSIFFLAGS    0x8914      /* set flags            */
    #define SIOCGIFADDR 0x8915      /* get PA address       */                                                                                                                         
    #define SIOCSIFADDR 0x8916      /* set PA address       */
    #define SIOCGIFDSTADDR  0x8917      /* get remote PA address    */
    #define SIOCSIFDSTADDR  0x8918      /* set remote PA address    */
    #define SIOCGIFBRDADDR  0x8919      /* get broadcast PA address */
    #define SIOCSIFBRDADDR  0x891a      /* set broadcast PA address */
    #define SIOCGIFNETMASK  0x891b      /* get network PA mask      */
    #define SIOCSIFNETMASK  0x891c      /* set network PA mask      */
    #define SIOCGIFMETRIC   0x891d      /* get metric           */
    #define SIOCSIFMETRIC   0x891e      /* set metric           */
    #define SIOCGIFMEM  0x891f      /* get memory address (BSD) */
    #define SIOCSIFMEM  0x8920      /* set memory address (BSD) */
    #define SIOCGIFMTU  0x8921      /* get MTU size         */
    #define SIOCSIFMTU  0x8922      /* set MTU size         */
    #define SIOCSIFNAME 0x8923      /* set interface name       */
    #define SIOCSIFHWADDR   0x8924      /* set hardware address     */
    #define SIOCGIFENCAP    0x8925      /* get/set encapsulations       */
    #define SIOCSIFENCAP    0x8926
    #define SIOCGIFHWADDR   0x8927      /* Get hardware address     */
    #define SIOCGIFSLAVE    0x8929      /* Driver slaving support   */
    #define SIOCSIFSLAVE    0x8930
    #define SIOCADDMULTI    0x8931      /* Multicast address lists  */
    #define SIOCDELMULTI    0x8932
    #define SIOCGIFINDEX    0x8933      /* name -> if_index mapping */
    #define SIOGIFINDEX SIOCGIFINDEX    /* misprint compatibility :-)   */
    #define SIOCSIFPFLAGS   0x8934      /* set/get extended flags set   */
    #define SIOCGIFPFLAGS   0x8935
    #define SIOCDIFADDR 0x8936      /* delete PA address        */
    #define SIOCSIFHWBROADCAST  0x8937  /* set hardware broadcast addr  */
    #define SIOCGIFCOUNT    0x8938      /* get number of devices */
    
    #define SIOCGIFBR   0x8940      /* Bridging support     */
    #define SIOCSIFBR   0x8941      /* Set bridging options     */
    
    #define SIOCGIFTXQLEN   0x8942      /* Get the tx queue length  */
    #define SIOCSIFTXQLEN   0x8943      /* Set the tx queue length  */
    
    
    /* ARP cache control calls. */
                /*  0x8950 - 0x8952  * obsolete calls, don't re-use */
    #define SIOCDARP    0x8953      /* delete ARP table entry   */
    #define SIOCGARP    0x8954      /* get ARP table entry      */
    #define SIOCSARP    0x8955      /* set ARP table entry      */
    
    /* RARP cache control calls. */
    #define SIOCDRARP   0x8960      /* delete RARP table entry  */
    #define SIOCGRARP   0x8961      /* get RARP table entry     */
    #define SIOCSRARP   0x8962      /* set RARP table entry     */
    
    /* Driver configuration calls */
    
    #define SIOCGIFMAP  0x8970      /* Get device parameters    */
    #define SIOCSIFMAP  0x8971      /* Set device parameters    */
    
    /* DLCI configuration calls */
    
    #define SIOCADDDLCI 0x8980      /* Create new DLCI device   */
    #define SIOCDELDLCI 0x8981      /* Delete DLCI device       */
    
    /* Device private ioctl calls.  */
    
    /* These 16 ioctls are available to devices via the do_ioctl() device
       vector.  Each device should include this file and redefine these
       names as their own. Because these are device dependent it is a good
       idea _NOT_ to issue them to random objects and hope.  */
    
    #define SIOCDEVPRIVATE      0x89F0  /* to 89FF */
    
    /*
     *  These 16 ioctl calls are protocol private
     */
    
    #define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */ 
    
    #!/usr/bin/python 
    # -*- coding: utf-8 -*-
    
    import socket, fcntl, struct
    import re
    
    # https://docs.python.org/2/library/fcntl.html
    
    with open('/proc/net/route', 'r') as f:
        for line in f:
            m = re.match('(S+)s+(S+)s+(S+)s+.*', line)
            if m.group(1) !='Iface' and m.group(2) == '00000000' and m.group(3) != '00000000':
                interface = m.group(1)
                gateway =  '.'.join([
                    str(int(m.group(3)[6:8], 16)),
                    str(int(m.group(3)[4:6], 16)),
                    str(int(m.group(3)[2:4], 16)),
                    str(int(m.group(3)[0:2], 16))
                ])
                   
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    ip = socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', interface))[20:24])
    netmask = socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x891b, struct.pack('256s', interface))[20:24])
    
    if __name__ == '__main__':
        print '%s: %s / %s / %s' % (interface, ip, netmask, gateway)
    
    # eth0: 192.168.28.143 / 255.255.255.0 / 192.168.28.3
    
  • 相关阅读:
    Redis学习六(java中使用redis)
    Redis学习五(新数据类型)
    Redis学习四(发布和订阅)
    Redis学习三(配置文件说明)
    Redis学习二(常用五大数据类型)
    Redis学习一(源码安装redis)
    RocketMq常见问题记录
    总结多种容器化技术对比
    关于Redis集群部署和持久化的相关问题
    配置Jenkins连接kubernetes的Pod Template模板
  • 原文地址:https://www.cnblogs.com/liujitao79/p/5387827.html
Copyright © 2011-2022 走看看