def get_ip_address(ifname): 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])
1.套接字
2.通常,非Python程序以32位字节包的形式存储和使用IP地址。inet_aton(ip_addr)和inet_ntoa(packed)函数在这个形式和IP地址间作转换:http://blog.sina.com.cn/s/blog_6d0599f90100rlem.html
>>> socket.inet_aton(‘192.169.137.77‘) ‘\xc0\xa9\x89M‘
3.文件描述符与一个真实的socket连接,而非一个文件。socket对象的fileno()方法返回关于这个socket的文件描述符。
4.linux里面提供了mac地址和ip地址获取的ioctl参数;
#define SIOCGIFADDR 0x8915 /* get PA address */ #define SIOCSIFADDR 0x8916 /* set PA address */ #define SIOCSIFHWADDR 0x8924 /* set hardware address */ #define SIOCGIFHWADDR 0x8927 /* Get hardware address */
5. struct.pack用于将Python的值根据格式符,转换为字符串(因为Python中没有字节(Byte)类型,可以把这里的字符串理解为字节流,或字节数组)。其函数原型为:struct.pack(fmt, v1, v2, ...),参数fmt是格式字符串,关于格式字符串的相关信息下面有所介绍。v1, v2, ...表示要转换的python值。http://blog.sina.com.cn/s/blog_4b5039210100f1tu.html
6.ioctl()。 http://blog.csdn.net/shanshanpt/article/details/19897897
时间: 2024-10-11 00:07:24