尝试使用pybonjour,但不确定它是否是我需要的。https://code.google.com/p/pybonjour/
我希望能够自动发现出现在我的网络上的iOS设备,稍后将基于此运行一个html" target="_blank">脚本,但首先我想在它出现/消失在我的wifi网络上时立即发现iOS设备。
所以问题是,我该怎么做?在安装了python27和pybonjour包的windows机器上运行,这两个示例在pybonjour页面上运行,但是我应该运行什么命令来使用我的网络上包含的脚本发现iOS设备呢?还是只有我运行此脚本的pc上运行的发现服务!
如果我走错了方向,请告诉我,我好像找不到这个包的文档!
python browse_and_resolve.py xxxxxx
谢谢马特。
更新...
这篇文章和浏览器很有帮助,http://marknelson.us/2011/10/25/dns-service-discovery-on-windows/ 找到我需要搜索的服务。
例如;(这发现了我的苹果电视,不在家里的ATM上,所以无法检查iphone叫什么!我猜是iphone!
python browse_and_resolve.py _appletv._tcp
此外,如果您有Windows实用程序dns-sd.exe这将搜索网络上可用的所有服务。我用它来找到我想要的东西。
dns-sd -B _services._dns-sd._udp
更新...
“Bonjour有两种用法:-发布服务-检测(浏览)可用服务”。
对于我想做的事情,我认为它不会起作用,因为ipad / iPhone不会宣传服务,除非我正在运行一个广告的应用程序(或者越狱我的iPhone / ipad,然后ssh将打开)。还有其他想法吗?
因此,我已经在同一问题上工作了大约一年。我很快就让它在我的mac上运行,但在我的PC上运行时遇到了很多麻烦。我尝试了很多不同的方法。我有一个家庭自动化系统,当我或我的伴侣在家时(也就是说,我们的iPhone可以在家庭WiFi上检测到),它可以打开暖气和热水(通过arduino和RF模块)。最后,我使用“nslookup”查找iPhone的IP地址(以防IP地址因动态而发生变化(但在我的路由器上实际上从未发生变化)),并使用“nmap”检测iPhone是否在网络上。如果iPhone处于深度睡眠状态,“nmap”并不总能找到手机,所以我在它说手机在家之前检查了10次。下面是我用python编写的家庭自动化代码的一部分。我已经习惯了穿线。任何与下面代码有关的问题,请告诉我。
# Dictionary to store variables to reuse on program restart
v = {
'boilerControlCH' : 'HIH', # 'scheduled' or 'HIH' (Honey I'm Home)
'boilerControlHW' : 'scheduled',
'thermostatSetPoint' : 20.8,
'thermostatVariance' : 0.1,
'morningTime' : datetime(1970,1,1,6,0,0),
'nightTime' : datetime(1970,1,1,23,0,0),
'someOneHome' : False,
'guest' : False,
'minimumTemperatureOO' : False,
'minimumTemperature' : 4.0,
'iPhoneMark' : {'iPhoneHostname' : 'marks-iphone', 'home' : False},
'iPhoneJessica' : {'iPhoneHostname' :'jessicaesiphone', 'home' : False}
}
和
# Check if anyone at home
def occupancyStatus(person, Bol = False):
with lockOccupancyStatus:
someOneHome = False
if 'iPhone' in person:
v[person]['home'] = Bol
elif 'retest' in person:
pass
else:
v[person] = Bol
if v['guest'] == True:
someOneHome = True
for key in v:
if 'iPhone' in key:
if v[key]['home'] == True:
someOneHome = True
v['someOneHome'] = someOneHome
variablesToFile()
return
和主代码
# iPhone home status threading code
class nmapClass(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
def run(self):
global exitCounter
nmapThread()
msg.log('Exited nmapThread')
waitEvent.set()
waitEventAdjustable.set()
serialDataWaiting.set()
exitCounter += 1
def nmapThread():
iPhone = {}
maxCounts = 10
for phone in v:
if 'iPhone' in phone:
iPhone[phone] = {}
iPhone[phone]['hostname'] = v[phone]['iPhoneHostname']
iPhone[phone]['count'] = maxCounts
#msg.log(iPhone)
while exitFlag[0] == 0:
for phone in iPhone:
if iPhone[phone]['count'] > 0:
phoneFound = False
IPAddress = '0.0.0.0'
# Find iPhones IP address using its hostname
commandNsloolup = 'nslookup %s' %iPhone[phone]['hostname']
childNslookup = pexpect.popen_spawn.PopenSpawn(commandNsloolup, timeout = None)
output = childNslookup.readline()
while '\r\n' in output:
#msg.log(output)
if 'Name:' in output:
output = childNslookup.readline()
if 'Address:' in output:
tempStr = output
startPoint = tempStr.find('192')
tempStr = tempStr[startPoint:]
IPAddress = tempStr.replace('\r\n', '')
#msg.log(IPAddress)
output = childNslookup.readline()
if IPAddress == '0.0.0.0':
pass
#msg.error('Error finding IP address for %s' %iPhone[phone]['hostname'], GFI(CF()).lineno)
else:
#commandNmap = 'nmap -PR -sn %s' %IPAddress
#commandNmap = 'nmap -p 62078 -Pn %s' %IPAddress # -p specifies ports to try and access, -Pn removes pinging
commandNmap = 'nmap -p 62078 --max-rate 100 %s' %IPAddress
childNmap = pexpect.popen_spawn.PopenSpawn(commandNmap, timeout = None)
output = childNmap.readline()
while '\r\n' in output:
if 'Host is up' in output:
phoneFound = True
break
output = childNmap.readline()
#if phoneFound:
# break
if phoneFound:
iPhone[phone]['count'] = 0
if v[phone]['home'] == False:
msg.log('%s\'s iPhone has returned home' %phone)
occupancyStatus(phone, True)
waitEventAdjustable.set()
#else:
#msg.log('%s\'s iPhone still at home' %phone)
else:
iPhone[phone]['count'] -= 1
if v[phone]['home'] == True and iPhone[phone]['count'] == 0:
msg.log('%s\'s iPhone has left home' %phone)
occupancyStatus(phone, False)
waitEventAdjustable.set()
#else:
#msg.log('%s\'s iPhone still away from home' %phone)
elif iPhone[phone]['count'] < 0:
msg.error('Error with count variable in iPhone dictionary', GFI(CF()).lineno)
longWait = True
for phone in iPhone:
if iPhone[phone]['count'] > 0:
longWait = False
#msg.log('%s: %s' %(phone, iPhone[phone]['count']))
if longWait:
#msg.log('wait long')
# 600 = run every 10 minutes
waitEvent.wait(timeout=600)
for phone in iPhone:
iPhone[phone]['count'] = maxCounts
else:
#msg.log('wait short')
waitEvent.wait(timeout=60)
return
如果您将代码直接复制到自己的脚本中,代码可能不起作用,因为有一些部分缺失,我没有复制这些部分,以尽量保持简单易读,但希望上面的代码能让每个人都了解我是如何做的。
使用python nmap而不是Bonjour。或者您可以使用pyzeroconf(Bonjour是ZeroCon的一个实现),但它有点过时(但仍然可以工作)。
python-nmap可能是最简单的,假设您想找到主机名中有“iPhone”或“iPad”的所有连接设备(只是一个简单的概念):
import nmap
...
def notify_me(ip, hostname):
print("I found an iOS device! IP Address: %s, Hostname: %s" % (ip, hostname))
iOS_device_list = ['iPhone', 'iPad']
iOS_devices_on_net = {}
nm = nmap.PortScanner()
# scan ip range
for i in range(2, 50, 1):
ip = "192.168.1." + str(i)
# specify ports to scan
nm.scan(ip, '62078') # Matt mentioned that it picks up iphone-sync on this port
hostname = nm[ip].hostname()
for device in iOS_device_list:
if device.lower() in hostname.lower():
iOS_devices_on_net.update({ip:hostname})
notify_me(ip, hostname)
# show all iOS devices in ip range
print iOS_devices_on_net
这种方法的局限性在于,它依赖于未更改其主机名的个人,该主机名最初包括其名称和设备名。它还假设iOS设备上有一个监听端口,该端口将返回主机名(可能不是这样)。您可以使用<code>osscan
从命令行使用nmap(我相信python-nmap有nm.commandline()
方法)是最简单的:
nmap -O -v ip
还可以尝试添加< code >-OS scan-guess;- fuzzy以获得最佳结果。示例:
nmap -O -v --osscan-guess ip
然后只需在输出中搜索iOS设备关键字(参见本示例)。它是人类可读的。请注意,您需要以管理员身份运行所有这些,才能使其正常工作(Windows:runas
,其他:sudo
)。
你想做的事情(a)可能做不到,(b)如果可以的话可能没什么用处。
Bonjour的重点是发现服务,而不是设备。当然,每个服务都是由某些设备提供的,因此您可以间接地发现使用它的设备...
据我所知,(Apple TV除外)不会宣传任何服务,除非您正在运行一个使用Bonjour在其他机器上查找相同应用程序的应用程序。(越狱设备除外,它经常宣传SSH、法新社等。)
有几种方法可以间接获取网络上任何人正在宣传的所有服务的列表。最简单的可能是使用Bonjour Browser for Windows。(我从来没有真正使用过它,但是我使用过的原始Mac工具和Java端口都为Windows用户推荐了这个Windows端口。启动它,您将获得一个服务列表,您可以单击每个服务以获取详细信息。
因此,您可以验证您的iPhone和iPad是否没有宣传任何服务,这将表明无法通过Bonjour检测到它们。
同时,即使您确实找到了设备,您也打算做什么?想必你想以某种方式与设备通信,对吧?无论您尝试与什么服务进行通信...只需浏览该服务,然后,如果合适,请筛选到iOS设备。这必须比浏览iOS设备然后过滤到具有您想要的服务的设备更容易。
至于有没有办法检测iOS设备......嗯,至少有两种可能。我不知道他们中的任何一个是否有效,但是......
首先,即使iOS设备没有为您做广告,我也假设它正在浏览您可以宣传的服务。否则,它怎么会发现有一个Apple TV到AirTunes,LAN上有一个iTunes可以同步,等等?
因此,使用Bonjour Browser获得您的iTunes运行的桌面、Apple TV等所有服务的列表。都是广告。然后关闭桌面上的所有服务,使用PyBonjour来广告任何看起来似乎相关的服务(如果需要,使用netcat在您广告的端口上放置琐碎的侦听器)。然后打开你的iPhone,看看它是否连接到其中任何一个。你可能想让它运行一段时间,或者关闭WiFi,然后再打开。(我猜,尽管苹果公司提出了建议,但它并没有连续浏览大多数服务,而是每隔一段时间和/或每次网络状态变化时检查一次。毕竟苹果的推荐是针对前台交互app,而不是后台服务。)
不幸的是,即使您可以找到所有iOS设备都将连接到的服务,您也可能无法通过在那里获得连接来将iOS设备与其他设备区分开来。例如,我很确定任何运行iTunes的Mac或Windows box都会启动你的假AirTunes服务,任何Mac都会启动您的AirPrint,等等。那么,你如何区分这与iPhone启动它的区别呢?您可能需要实际提供足够的协议以从中获取信息。这对于苹果的无文档协议来说尤其困难。
但希望你运气好,会有所有iOS设备,而不是其他设备,想要与之交谈的东西。iTunes Sync似乎是显而易见的可能性。
或者,有一些事情他们必须广播,否则他们就不会工作。没有广播就上不了WiFi网络。大多数家庭WiFi网络使用DHCP,这意味着它们也必须广播DHCP发现(和请求)。您可以在这些邮件中检测到某种启发式签名。如果没有其他情况,启用DDNS应该会导致设备发送其主机名,您可以基于此进行猜测(例如,除非您更改默认值< code>hostname.lower()。endswith('iphone'))。
最简单的方法可能是将桌面设置为家庭网络的主要接入点。我相信这就像在控制面板的某个地方打开互联网连接共享一样简单。(设置为DHCP中继代理的开销要比设置为完整路由器的开销小得多,但我不知道您如何在Windows上开始这样做。)然后,您可以在接收到DHCP广播(或者,如果没有,802.11广播)时捕获它们。Wireshark将为您轻松捕获和解析消息,因此您可以观察并查看这是否值得进一步研究。(有关格式的详细信息,请参见RFC 2131,这些信息在Wireshark隐晦的一行程序描述中并不明显。)
你可以更进一步,观察每台主机接入互联网后的互联网连接。任何定期检查App Store、iOS升级服务器等的设备。…嗯,除非有一个越狱开发团队的人住在你家,那很可能是iPhone,对吧?缺点是,其中一些检查可能非常定期,在iPhone连接到网络6小时后检测它并不是很令人兴奋。
实验性的Web Bluetooth API在Chrome for Android Marshmallow的开发版本中运行良好。我可以简单地在<code>处启用实验标志chrome://flags/#enable-网络蓝牙和我很好去。 遗憾的是,网络蓝牙API在我的AndroidLollipop设备上不起作用。为什么?
我正在使用selenium打开并登录google帐户,这是我的第一步。我已成功打开并填写了电子邮件回复,但在提交后,我收到了以下错误 “此浏览器或应用程序可能不安全。了解更多尝试使用不同的浏览器。如果您已经在使用受支持的浏览器,您可以刷新屏幕并重试登录。”来自谷歌。 有什么办法可以绕过这个问题吗?下面是我的代码。
问题内容: 我正在尝试按顺序加载一组脚本,但是onload事件对我没有触发。 我猜想当使用jQuery将元素添加到DOM时,不会触发诸如el.onload之类的本地事件。如果我使用本机,则可以正常启动。 问题答案: 您应该在事件f.ex 之后* 设置属性: * 您还应该 在 附加事件 之前 将脚本附加到DOM : 请记住,您需要检查IE支持。如果您使用的是jQuery,则还可以尝试以下方法:htt
我希望能够在我的网络上发现Android设备,并可能检索一些关于它们的设备信息。这对于苹果设备来说非常容易,因为它们运行Bonjour服务。然而,我似乎找不到任何类似的服务运行在Android上。 这必须在不修改Android设备,安装某些服务或打开某些端口的情况下工作。它旨在与vanilla Android设备配合使用,就像Bonjour帮助您找到vanilla Apple设备一样。即使能够验证
本文向大家介绍对Python 网络设备巡检脚本的实例讲解,包括了对Python 网络设备巡检脚本的实例讲解的使用技巧和注意事项,需要的朋友参考一下 1、基本信息 我公司之前采用的是人工巡检,但奈何有大量网络设备,往往巡检需要花掉一上午(还是手速快的话),浪费时间浪费生命。 这段时间正好在学 Python ,于是乎想(其)要(实)解(就)放(是)双(懒)手。 好了,脚本很长又比较挫,有耐心就看看吧。
有人能帮我让VS2017与. NET Core测试项目一起使用吗? 我尝试从VS 2017模板为. NET Core创建MSTest和xUnit单元测试项目。它们都不适用于测试资源管理器(未发现),但是从项目文件夹运行可以正常工作。 复制步骤: < li >在VS 2017中创建新项目 < li >选择< code >单元测试项目(NET Core)或< code>xUnit测试项目(。NET C