从局域网中的MAC获取IP。在Android上使用kivy

从局域网中的MAC获取IP。在Android上使用kivy,android,ip,kivy,mac-address,Android,Ip,Kivy,Mac Address,我想为我的android手机构建一个kivy应用程序,可以连接到与android手机位于同一网络中的另一个设备(ESP8266或RaspberryPi) 我得到了设备的Mac,现在想运行一次扫描,返回该设备的当前IP地址(由于DHCP的原因,该地址有时会有所不同) 我读了很多关于这个问题的文章,下面的代码在我的Linux机器上运行: #!/usr/bin/env python # -*- coding: utf-8 -*- from kivy.app import App from kivy.

我想为我的android手机构建一个kivy应用程序,可以连接到与android手机位于同一网络中的另一个设备(ESP8266或RaspberryPi)

我得到了设备的Mac,现在想运行一次扫描,返回该设备的当前IP地址(由于DHCP的原因,该地址有时会有所不同)

我读了很多关于这个问题的文章,下面的代码在我的Linux机器上运行:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.textinput import TextInput
from kivy.uix.button import Button
from scapy.all import arping
from kivy.uix.boxlayout import BoxLayout



class App(App):

    def build(self):
        self.ti = TextInput(text='8c:cf:7c:18:75:63')
        self.btn = Button(on_press=self.getIP, text='Scan')
        self.label = Label(text='IP zu obiger Mac:\n')
        self.layout = BoxLayout(orientation='vertical')
        self.layout.add_widget(self.ti)
        self.layout.add_widget(self.btn)
        self.layout.add_widget(self.label)
        return self.layout

    def getIP(self, *args):
        mac = self.ti.text
        ans, unans = arping('192.168.0.*')
        for s, r in ans.res:
            line = r.sprintf("%Ether.src%  %ARP.psrc%").split()
            m = line[0]
            ip = line[1]
            if m.lower() == mac.lower():
                self.label.text = self.label.text + ip

if __name__=='__main__':
    App().run() 
如你所见,我正在导入scapy。要正确运行脚本,必须使用sudo运行。正因为如此,我在手机上收到一条短信,说许可被拒绝了。这与我在linux机器上没有使用sudo运行脚本时遇到的错误相同

有没有一个解决方案可以让这样一个portscanner与kivy一起在android上工作? (我尝试了python的nmap,但wich也不能与kivy一起工作)

我不想使用静态IP

谢谢回复

塞巴斯蒂安