【问题标题】:how to get Wireless LAN adapter Wi-Fi IP Address in Python?如何在 Python 中获取无线 LAN 适配器 Wi-Fi IP 地址?
【发布时间】:2020-06-24 14:54:17
【问题描述】:

我目前使用这种方法在 python 上显示我的 IP 地址,但我意识到这不是我需要的 IP 地址

hostname = socket.gethostname() 

IPAddr => socket.gethostbyname(hostname)

我的代码有问题吗?还是只是使用不同的方法?

【问题讨论】:

  • 公网IP还是本地IP?
  • 本地 ip @Tylerr
  • socket.gethostbyname(socket.gethostname()) 返回什么?
  • "192.168.56.1" 这就是我得到的,我在发布者和订阅者方法上使用此方法,奇怪的是,我在其他 PC 上的发布者 IP 和订阅者 IP 是相同的@Tylerr
  • 还是我对整个 IP 地址的理解有误?

标签: python python-3.x sockets networking ip


【解决方案1】:

这对我有用,但我将“无线”更改为“wi-fi”,因为在西班牙语 Windows 中输出更改为“Adaptador de LAN inalámbrica Wi-Fi”。 这段代码会更国际化

    for i in result.split('\n'):
        if 'wi-fi' in i: scan=1

谢谢老哥!!

【讨论】:

    【解决方案2】:

    获取IP地址

    import netifaces
    netifaces.gateways()
    iface = netifaces.gateways()['default'][netifaces.AF_INET][1]
    
    ip = netifaces.ifaddresses(iface)[netifaces.AF_INET][0]['addr']
    
    print(ip)
    

    【讨论】:

      【解决方案3】:

      Windows 特定实现,0.1 秒内运行。

      def wlan_ip():
          import subprocess
          result=subprocess.run('ipconfig',stdout=subprocess.PIPE,text=True).stdout.lower()
          scan=0
          for i in result.split('\n'):
              if 'wireless' in i: scan=1
              if scan:
                  if 'ipv4' in i: return i.split(':')[1].strip()
      print(wlan_ip()) #usually 192.168.0.(DHCP assigned ip)
      

      命令“ipconfig”的控制台输出:

      Wireless LAN adapter Wi-Fi:
      
         Connection-specific DNS Suffix  . :
         Link-local IPv6 Address . . . . . : fe80::f485:4a6a:e7d5:1b1c%4
         IPv4 Address. . . . . . . . . . . : 192.168.0.131 #<-Returns this part
      
         Subnet Mask . . . . . . . . . . . : 255.255.255.0
         Default Gateway . . . . . . . . . : 192.168.0.1
      

      【讨论】:

        【解决方案4】:

        试试这个:

        import socket
        def get_ip():
            s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
            try:
                # doesn't even have to be reachable
                s.connect(('10.255.255.255', 1))
                IP = s.getsockname()[0]
            except:
                IP = '127.0.0.1'
            finally:
                s.close()
            return IP
        

        然后使用get_ip()获取你的ip。

        参考:Finding local IP addresses using Python's stdlib

        【讨论】:

          猜你喜欢
          • 2016-01-11
          • 2011-04-02
          • 1970-01-01
          • 2012-04-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-19
          • 2015-04-27
          相关资源
          最近更新 更多