以前是有这样的工具,它会通过常用协议去刺探设备类型。比如windows的版本,计算机名等。现在不知道还有没有这样的工具,搜索一下看。
哦。这个应该相当容易了。因为相机是专业设备。所以通常会有一个控制协议。因为是专业的,所以这个socket应该是加密的。 你只需要连接上后,随便发一个命令,如果被断开。很可能就是这个相机了。
另外相机通常都是有MAC地址的。如果你发现它在你预计的MAC地址范围内,也可以知道是它。 相机是专业抓拍的。通常不会放在互联网上,应该是局域网。你可以排除局域网上的其它计算机,自然了也就知道哪些是相机了。
这些都不是难题。你首先扫描所有的IP地址。再扫描它们的端口数量。如果端口数量多通常是计算机,如果端口只有1-2个就是专业设备。扫描不到的,应该就是计算机啦。
试试,并不难。
如果是用Basic Auth 的话,可以参考这段代码
import urllib2, base64
request = urllib2Request(url) base64string = base64encodestring('%s:%s' % (user,password))[:-1] requestadd_header("Authorization", "Basic %s" % base64string)
htmlFile = urllib2urlopen(request) htmlData = htmlFileread() print htmlData htmlFileclose()
On 4/10/07, Shuning Hong <hong@gmailcom> wrote:
这是我的做法:
params='MainID=C&SubID=1'
authstr='Basic '+base64encodestring(routeruser+':'+routerpass)
authstr=authstr[:-1] # delete last /n
headers={'Authorization':authstr}
On 4/10/07, 蒋辉 <jhui@163com> wrote:
我是电信光纤宽带用户,用web 认证不支持多台机器上网。参考了网上的资料,想 写一个 python 的小程序,可以自动获取宽带路由器的外网IP,自动发送认证信 息。宽带路由器登录时会要用户名密码,否则就连不上,我通过使用嗅探器抓包把 认证过的'Authorization' 值取出放在我的程序里能连上路由器,但通用性太差。 有什么好方法可以解决吗?
我的小程序如下: #ptyhon import urllib import >
首先放出一个 TCP/IP 的程序,这里是单线程服务器与客户端,在多线程一节会放上多线程的TCP/IP服务程序。
这里将服务端和客户端放到同一个程序当中,方便对比服务端与客户端的不同。
TCP/IP是因特网的通信协议,其参考OSI模型,也采用了分层的方式,对每一层制定了相应的标准。
网际协议(IP)是为全世界通过互联网连接的计算机赋予统一地址系统的机制,它使得数据包能够从互联网的一端发送至另一端,如 130207244244,为了便于记忆,常用主机名代替IP地址,例如 baiducom。
UDP (User Datagram Protocol,用户数据报协议) 解决了上述第一个问题,通过端口号来实现了多路复用(用不同的端口区分不同的应用程序)但是使用UDP协议的网络程序需要自己处理丢包、重包和包的乱序问题。
TCP (Transmission Control Protocol,传输控制协议) 解决了上述两个问题,同样使用端口号实现了复用。
TCP 实现可靠连接的方法:
socket通信模型及 TCP 通信过程如下两张图。
[上传失败(image-6d947d-1610703914730)]
[上传失败(image-30b472-1610703914730)]
socketgetaddrinfo(host, port, family, socktype, proto, flags)
返回: [(family, socktype, proto, cannonname, sockaddr), ] 由元组组成的列表。
family:表示socket使用的协议簇, AF_UNIX : 1, AF_INET: 2, AF_INET6 : 10。 0 表示不指定。
socktype: socket 的类型, SOCK_STREAM : 1, SOCK_DGRAM : 2, SOCK_RAW : 3
proto: 协议, 套接字所用的协议,如果不指定, 则为 0。 IPPROTO_TCP : 6, IPPRTOTO_UDP : 17
flags:标记,限制返回内容。 AI_ADDRCONFIG 把计算机无法连接的所有地址都过滤掉(如果一个机构既有IPv4,又有IPv6,而主机只有IPv4,则会把 IPv6过滤掉)
AI _V4MAPPED, 如果本机只有IPv6,服务却只有IPv4,这个标记会将 IPv4地址重新编码为可实际使用的IPv6地址。
AI_CANONNAME,返回规范主机名:cannonname。
getaddrinfo(None, 'smtp', 0, socketSOCK_STREAM, 0, socketAP_PASSIVE)
getaddrinfo('ftpkernelorg', 'ftp', 0, 'socketSOCK_STREAM, 0, socketAI_ADDRCONFIG | socketAI_V4MAPPED)
利用已经通信的套接字名提供给getaddrinfo
mysock = server_sockaccept()
addr, port = mysockgetpeername()
getaddrinfo(addr, port, mysockfamily, mysocktype, mysockproto, socketAI_CANONNAME)
TCP 数据发送模式:
由于 TCP 是发送流式数据,并且会自动分割发送的数据包,而且在 recv 的时候会阻塞进程,直到接收到数据为止,因此会出现死锁现象,及通信双方都在等待接收数据导致无法响应,或者都在发送数据导致缓存区溢出。所以就有了封帧(framing)的问题,即如何分割消息,使得接收方能够识别消息的开始与结束。
关于封帧,需要考虑的问题是, 接收方何时最终停止调用recv才是安全的?整个消息或数据何时才能完整无缺的传达?何时才能将接收到的消息作为一个整体来解析或处理。
适用UDP的场景:
由于TCP每次连接与断开都需要有三次握手,若有大量连接,则会产生大量的开销,在客户端与服务器之间不存在长时间连接的情况下,适用UDP更为合适,尤其是客户端太多的时候。
第二种情况: 当丢包现象发生时,如果应用程序有比简单地重传数据聪明得多的方法的话,那么就不适用TCP了。例如,如果正在进行音频通话,如果有1s的数据由于丢包而丢失了,那么只是简单地不断重新发送这1s的数据直至其成功传达是无济于事的。反之,客户端应该从传达的数据包中任意选择一些组合成一段音频(为了解决这一问题,一个智能的音频协议会用前一段音频的高度压缩版本作为数据包的开始部分,同样将其后继音频压缩,作为数据包的结束部分),然后继续进行后续 *** 作,就好像没有发生丢包一样。如果使用TCP,那么这是不可能的,因为TCP会固执地重传丢失的信息,即使这些信息早已过时无用也不例外。UDP数据报通常是互联网实时多媒体流的基础。
参考资料:
动态获取IP这个事情我们要解决什么问题?
家里有台服务器,如果我们想要访问的话,必然需要通过一个外网IP,然后通过内部和外部的端口进行映射才能访问到,为了方便的获取访问家庭的外部IP,所以需要通过内部自发现,然后通知到自己。当然也有其他方案,例如花生壳、动态域名解析等,甚至可以通过远程协助软件手工发现。这里呢我们利用了crontab定时任务,自动触发获取家庭公网IP信息发送给自己。
如果家庭私有云采用的是群辉等成熟方案,可以绕过,直接跳转到学习python的过程,因为他们一般都自带相关功能。
这个系列的重点在于学习一下python3简单用法,以及思考如何一步步改进程序使得程序更加简洁有效。总共分为4个步骤。第1步,联系运营商申请外网IP;第2步,服务器安装python3环境;第3步学习通过python3写一个获取本机外网的IP小程序,步骤4,服务器上定时执行python程序
首先,我们要知道为什么要申请外网IP。目前家用宽带基本上是浮动的IP,经常会发生变化,且基本上没有外网IP,都是通过运营商NAT设备链接到外网,共享一套IPV4地址池。平时在家里使用网络我们不会在意自己家是否有一个固定的IP,通常想要一个完全固定的IP几乎不现实,费用比较高,且一般针对企业。
有了外网之后,我们可以通过地址映射,将公网IP直接映射到家里内网地址,通过直连外网地址的方式连接到家里服务器或者家里提供的私有服务上。至于如何申请和配置映射,如果有需要,后面开放教程教给大家(话外音:别烦啦,打电话给运营商就行 - )。
这里也简单带过,因为网络上教程非常多,下面仅列一下 *** 作步骤
先通过如下命令检查下是否已经安装,如下图显示内容就表示已经安装好了
如果没有安装的话执行如下命令
执行如下命令,等待一段时间,如果跳过这一步骤,通过gcc编译python的会提示一些错误,导致pip没有安装等问题
按如下命令顺序逐个执行
通过以上一顿 *** 作,在控制台输入python3,如下图,表示已经安装完成,测试完成后输入exit()退出即可
>>> from socket import socket, SOCK_DGRAM, AF_INET
>>> s = socket(AF_INET, SOCK_DGRAM)
>>> sconnect(('googlecom', 0))
>>> sgetsockname()
('1921681113', 43711)
以上就是关于python怎样获取连接的IP的设备信息全部的内容,包括:python怎样获取连接的IP的设备信息、怎么样用python编写一个程序语言登录路由器获取器 *** 作页面内容、Python网络编程 -- TCP/IP等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)