从局域网中的MAC获取IP。在Android上使用kivy
我想为我的android手机构建一个kivy应用程序,可以连接到与android手机位于同一网络中的另一个设备(ESP8266或RaspberryPi) 我得到了设备的Mac,现在想运行一次扫描,返回该设备的当前IP地址(由于DHCP的原因,该地址有时会有所不同) 我读了很多关于这个问题的文章,下面的代码在我的Linux机器上运行:从局域网中的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.
#!/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
谢谢回复
塞巴斯蒂安