python查看开放的端口_python批量Telnet远程主机查看端口开放情况

周末被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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值