2017-08-26 9 views
1

#コードの後ろにreturnステートメント があると、指定されたインターフェイスのIPアドレスを取得するのに役立ち、どのような使用が0x8915の であるのか分かりません。0x8915の使用は何ですか?

#!/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)) 


The output of this script is shown in one line, as follows: 
$ python 3_5_get_interface_ip_address.py --ifname=eth0 
Interface [eth0] --> IP: 10.0.2.15 
    -
+0

インタラクティブなインタプリタに '0x8915'と入力するだけです。 '0x1'、' 0x10'、 '0xff'も試してください。 –

+0

0x8915は35093 – Inconnu

+0

fcntl.ioctl()の使用方法は? –

答えて

1

0x8915のLinux SIOCGIFADDRの値です。残念なことに、このPythonコードではコードが難しく、コードの可読性に影響を与えるコメントはありません。 SIOCGIFADDRは、インターフェイスのIPアドレスを取得するためにioctl内で使用されます。詳細については、this documentationを参照してください。this codeは、あなたが引用しているPythonコードよりも読みやすいバージョンです。

関連する問題