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
    
  • 相关阅读:
    Leetcode 238. Product of Array Except Self
    Leetcode 103. Binary Tree Zigzag Level Order Traversal
    Leetcode 290. Word Pattern
    Leetcode 205. Isomorphic Strings
    Leetcode 107. Binary Tree Level Order Traversal II
    Leetcode 102. Binary Tree Level Order Traversal
    三目运算符
    简单判断案例— 分支结构的应用
    用switch判断月份的练习
    java基本打印练习《我行我素购物系统》
  • 原文地址:https://www.cnblogs.com/liujitao79/p/5387827.html
Copyright © 2011-2022 走看看