首页 > 编程语言 > 详细

python批量Telnet远程主机

时间:2017-05-15 23:39:02      阅读:685      评论:0      收藏:0      [点我收藏+]

    周末被Wanna Cry病毒轰炸的朋友圈,特写了个小脚本,可以批量检测网络内所有主机的445端口是否开启,

针对检测出来445端口开放的ip全部简单记录在txt中,支持协程和单线程2种模式

    

#!/usr/bin/env python2.7
# encoding:utf-8
import telnetlib
import sys
from gevent import monkey;
reload(sys)
sys.setdefaultencoding("utf-8")
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=445, 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+True
    except:
        print(‘{}ip 的端口不通‘.format(ip))


iplist = get_ip(‘192.168.1.1-192.168.2.1‘)
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)




本文出自 “马鹏飞——著” 博客,请务必保留此出处http://mapengfei.blog.51cto.com/1552412/1926039

python批量Telnet远程主机

原文:http://mapengfei.blog.51cto.com/1552412/1926039

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!