0x8915有什么用?

问题描述 投票:0回答:1

我不明白

get_ip_address()
中的代码如何帮助获取给定接口的IP地址。另外,值
0x8915
作为
fcntl.ioctl()
的第二个参数有何意义?

#!/usr/bin/env python

import argparse
import sys
import fcntl
import struct
import array
import socket

def get_ip_address(ifname):
    #interfaces = list_interfaces()
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(
        fcntl.ioctl(s.fileno(), 0x8915, struct.pack('256s', ifname[:15]))[
        20:24])

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description='Python networkingutils')
    parser.add_argument('--ifname', action="store", dest="ifname",
                        required=True)
    given_args = parser.parse_args()
    ifname = given_args.ifname
    print "Interface [%s] --> IP: %s" %(ifname, get_ip_address(ifname))

该脚本的输出显示在一行中,如下:

$ python 3_5_get_interface_ip_address.py --ifname=eth0
Interface [eth0] --> IP: 10.0.2.15
python sockets
1个回答
1
投票

0x8915 是 Linux SIOCGIFADDR 的值。不幸的是,它是硬编码在这个Python代码中,并且没有任何影响代码可读性的注释。 SIOCGIFADDR 在 ioctl 中使用来获取接口的 IP 地址。请参阅此文档了解更多信息,或查看此代码,这是比您引用的Python代码更可读的C版本。

© www.soinside.com 2019 - 2024. All rights reserved.