Python3批量Telnet远程主机查看端口开放情况,可用于查找树莓派内网IP

需求

最近整了一个树莓派WiFi链接的,没有屏幕,但是我开放ssh端口,面对茫茫的ip池我总不能一个个试试,所以我找到树莓派在局域网中的ip即可,所以我扫描局域网内所有开放了22端口的ip。

环境配置

安装python3+

安装gevent 用于协程

pip install gevent

新建一个py文件

# encoding:utf-8
import telnetlib
import importlib,sys
from gevent import monkey;
monkey.patch_all()
import gevent
 
#ip转换方法
def ip2num(ip):
    ip=[int(x) for x in ip.split('.')]
    return ip[0] <<24 | ip[1]<<16 | ip[2]<<8 |ip[3]
def num2ip(num):
    return '%s.%s.%s.%s' %( (num & 0xff000000) >>24,
                            (num & 0x00ff0000) >>16,
                            (num & 0x0000ff00) >>8,
                            num & 0x000000ff )
 
#把输入的ip范围组合成一个list形式
def get_ip(ip):
    start,end = [ip2num(x) for x in ip.split('-') ]
    return [ num2ip(num) for num in range(start,end+1) if num & 0xff ]
 
#确认指定的ip是否连通的方法
def check_port(ip):
    #调用系统的telnetlib,telnet指定ip的指定端口,如果成功,则
    try:
        tn = telnetlib.Telnet(ip, port=22, timeout=10)
 
        #给ip后面加一个换行符,用来在txt里面换行显示
        new_ip = ip + '\n'
 
        #以追加的形式将端口开放的ip列出来
        file_object = open('thefile.txt', 'a')
        file_object.write(new_ip)
        file_object.close()
        print(ip +" ------------通")
    except:
        print('{} ip 的端口不通'.format(ip))
 
 
iplist = get_ip('192.168.1.1 - 192.168.1.254')
print(iplist)
 
#单线程模式
# for ip in iplist:
#     print check_point(ip)
 
 
#协程模式,多并发
#下面这句的意思就是循环列表里面的ip,全部加到协程(gevent)里面,一起并发启动执行
threads = [gevent.spawn(check_port, ip) for ip in iplist]
gevent.joinall(threads)

根据需求,修改以下两处。

# port 你要扫描的端口
tn = telnetlib.Telnet(ip, port=22, timeout=10)
# 你要扫描的网段
iplist = get_ip('192.168.1.1 - 192.168.1.254')

运行py文件:

python seachNetPortByIP.py

结果:

也可以在 thefile.txt文件中查看

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值