python3扫描_Python3 实现高效的多线程端口扫描器

这几天写了一个端口扫描器,可以快速的扫描发现目前电脑开启的端口,思路是通过socket来创建TCP连接来测试端口是否开放。

#!usr/bin/env python

# -*-coding:UTF-8 -*-

# @Time: 2018/9/7 11:07

# @Author:gumgui

# @File: 端口扫描.py

import time

import socket

from gevent import monkey

monkey.patch_all()

import gevent

import gevent.pool

def TCP_connect(ip,port):

"""模拟TCP连接"""

TCP_sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

TCP_sock.settimeout(0.5) #设置连接超时

try:

result = TCP_sock.connect_ex((ip,int(port)))

if result == 0:

print("[*]%s 端口 开启\t"%port)

else:

# print("[!]%s端口 关闭"%port)

pass

TCP_sock.close()

except socket.error as e:

print("[!]错误:",e)

def scan_ip():

"""扫描目标IP"""

ip = input("[+]输入扫描目标IP:")

print("[*]正在扫描")

scan_port(ip)

def scan_web():

"""扫描目标网址"""

web = input("[+]输入扫描网址:")

if "http://" in web or "https://" in web:

web = web[web.find('://')+3:]

print(web)

print("[*]正在分析网站服务器IP")

try:

server_ip = socket.gethostbyname(str(web))

print("[*]服务器IP为%s"%server_ip)

scan_port(server_ip)

except Exception as e:

print("[!]服务器IP获取失败")

pass

def scan_port(ip):

"""扫描端口"""

print("[*]开始扫描目标端口")

start = time.time()

g = gevent.pool.Pool(50) #设置线程数

run_list = []

for port in range(1,65535):

run_list.append(g.spawn(TCP_connect,ip,port))

gevent.joinall(run_list)

end = time.time()

print("[*]总耗时%s"%time.strftime("%H:%M:%S",time.gmtime(end-start)))

def main():

print(

"""

1.通过IP扫描端口

2.通过网址扫描端口

"""

)

uc = int(input("[+]请输入选择:"))

if 1 == uc:

scan_ip()

elif 2 == uc:

scan_web()

else:

print("[!]输入有误")

if __name__ == "__main__":

main()

运行结果如下:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值