python获取IP

#! /usr/bin/env python
import socket
import fcntl
import struct

SIOCGIFADDR == 0x8915

def get_ip_address(ifname):
    s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(
                            s.fileno(),
                            SIOCGIFADDR,
                            struct.pack('256s',ifname[:15])
                            )[20:24])
ethname = 'eth0'
print 'eth0 ip:',get_ip_address(ethname)

ioctl 函数详细说明:http://blog.csdn.net/evenness/article/details/7665970


Request 参数的宏定义

/* --  /include/uapi/linux/sockios.h  -- */
/*
 * INET     An implementation of the TCP/IP protocol suite for the LINUX
 *      operating system.  INET is implemented using the  BSD Socket
 *      interface as the means of communication with the user level.
 *
 *      Definitions of the socket-level I/O control calls.
 *
 * Version: @(#)sockios.h   1.0.2   03/09/93
 *
 * Authors: Ross Biro
 *      Fred N. van Kempen, <waltje@uWalt.NL.Mugnet.ORG>
 *
 *      This program is free software; you can redistribute it and/or
 *      modify it under the terms of the GNU General Public License
 *      as published by the Free Software Foundation; either version
 *      2 of the License, or (at your option) any later version.
 */
#ifndef _LINUX_SOCKIOS_H
#define _LINUX_SOCKIOS_H

#include <asm/sockios.h>

/* Linux-specific socket ioctls */
#define SIOCINQ     FIONREAD
#define SIOCOUTQ    TIOCOUTQ        /* output queue size (not sent + not acked) */

#define SOCK_IOC_TYPE   0x89

/* Routing table calls. */
#define SIOCADDRT   0x890B      /* add routing table entry  */
#define SIOCDELRT   0x890C      /* delete routing table entry   */
#define SIOCRTMSG   0x890D      /* unused           */

/* 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  */

/* SIOCGIFDIVERT was:   0x8944      Frame diversion support */
/* SIOCSIFDIVERT was:   0x8945      Set frame diversion options */

#define SIOCETHTOOL         0x8946      /* Ethtool interface        */

#define SIOCGMIIPHY         0x8947      /* Get address of MII PHY in use. */
#define SIOCGMIIREG         0x8948      /* Read MII PHY register.   */
#define SIOCSMIIREG         0x8949      /* Write MII PHY register.  */

#define SIOCWANDEV          0x894A      /* get/set netdev parameters    */

#define SIOCOUTQNSD         0x894B      /* output queue size (not sent only) */
#define SIOCGSKNS           0x894C      /* get socket network namespace */

/* 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       */

#define SIOCGIFVLAN 0x8982      /* 802.1Q VLAN support      */
#define SIOCSIFVLAN 0x8983      /* Set 802.1Q VLAN options  */

/* bonding calls */

#define SIOCBONDENSLAVE         0x8990      /* enslave a device to the bond */
#define SIOCBONDRELEASE         0x8991      /* release a slave from the bond*/
#define SIOCBONDSETHWADDR       0x8992  /* set the hw addr of the bond  */
#define SIOCBONDSLAVEINFOQUERY  0x8993   /* rtn info about slave state   */
#define SIOCBONDINFOQUERY       0x8994  /* rtn info about bond state    */
#define SIOCBONDCHANGEACTIVE    0x8995   /* update to a new active slave */

/* bridge calls */
#define SIOCBRADDBR     0x89a0      /* create new bridge device     */
#define SIOCBRDELBR     0x89a1      /* remove bridge device         */
#define SIOCBRADDIF     0x89a2      /* add interface to bridge      */
#define SIOCBRDELIF     0x89a3      /* remove interface from bridge */

/* hardware time stamping: parameters in linux/net_tstamp.h */
#define SIOCSHWTSTAMP   0x89b0      /* set and get config       */
#define SIOCGHWTSTAMP   0x89b1      /* get config           */

/* 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.
 *
 *  THESE IOCTLS ARE _DEPRECATED_ AND WILL DISAPPEAR IN 2.5.X -DaveM
 */

#define SIOCDEVPRIVATE  0x89F0  /* to 89FF */

/*
 *  These 16 ioctl calls are protocol private
 */

#define SIOCPROTOPRIVATE 0x89E0 /* to 89EF */
#endif  /* _LINUX_SOCKIOS_H */
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值