码迷,mamicode.com
首页 > 编程语言 > 详细

linux通过Python获取本机的ip,mac,网关,子网掩码,网卡名

时间:2020-01-03 21:35:08      阅读:218      评论:0      收藏:0      [点我收藏+]

标签:网站   ace   can   opener   ipa   _for   port   子网掩码   取ip地址   

1.通过模块netifaces获取,当系统为Windows时,可能会有报错现象

import os
import sys

try:
    import netifaces
except ImportError:
    try:
        command_to_execute = "pip install netifaces || easy_install netifaces"
        os.system(command_to_execute)
    except OSError:
        print "Can NOT install netifaces, Aborted!"
        sys.exit(1)
    import netifaces

routingGateway = netifaces.gateways()[default][netifaces.AF_INET][0]
routingNicName = netifaces.gateways()[default][netifaces.AF_INET][1]

for interface in netifaces.interfaces():
    if interface == routingNicName:
        # print netifaces.ifaddresses(interface)
        routingNicMacAddr = netifaces.ifaddresses(interface)[netifaces.AF_LINK][0][addr]
        try:
            routingIPAddr = netifaces.ifaddresses(interface)[netifaces.AF_INET][0][addr]
            # TODO(Guodong Ding) Note: On Windows, netmask maybe give a wrong result in ‘netifaces‘ module.
            routingIPNetmask = netifaces.ifaddresses(interface)[netifaces.AF_INET][0][netmask]
        except KeyError:
            pass

display_format = %-30s %-20s
print display_format % ("Routing Gateway:", routingGateway)
print display_format % ("Routing NIC Name:", routingNicName)
print display_format % ("Routing NIC MAC Address:", routingNicMacAddr)
print display_format % ("Routing IP Address:", routingIPAddr)
print display_format % ("Routing IP Netmask:", routingIPNetmask)

2.获取外网ip

!/usr/bin/env python
# 通过访问查询ip的网址,在响应页面正则获取ip地址,网站需要时常更新,在页面不能出现多个ip
import re,urllib2
class Get_public_ip:
    def getip(self):
        try:
            myip = self.visit("http://www.bejson.com/httputil/queryip/")
        except:
            try:
                myip = self.visit("https://www.8684.cn/ip")
            except:
                myip = "So sorry!!!"
        return myip
    def visit(self,url):
        opener = urllib2.urlopen(url)
        if url == opener.geturl():
            str = opener.read()
        return re.search(\d+\.\d+\.\d+\.\d+,str).group(0)

if __name__ == "__main__":
    getmyip = Get_public_ip()
    print getmyip.getip()

3.在知道网卡时候可以很快获取局域网内的ip

import struct
import fcntl
import socket

def getip(ethname):
    s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    return socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0X8915, struct.pack(256s, ethname[:15]))[20:24])

if __name__ == __main__:
    print getip(enp3s0)
# enp3s0 是ifconfig后看出来的

4.获取出的是127的,不太好,不明白应用场景

import socket

#获取计算机名称
hostname=socket.gethostname()
#获取本机IP
ip=socket.gethostbyname(hostname)
print(ip)

linux通过Python获取本机的ip,mac,网关,子网掩码,网卡名

标签:网站   ace   can   opener   ipa   _for   port   子网掩码   取ip地址   

原文地址:https://www.cnblogs.com/liangsha0/p/12146598.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!