我正在尝试用Python创建一个端口扫描程序。我得到扫描仪,但打印结果需要45分钟。我开始设置线程但是我无法弄清楚如何将不同的范围放入脚本中。我开始创建一个全局变量并尝试在每个线程中传递它。不幸的是它没有正常工作,我得到一个无效的语法错误。以下是代码。
import socket
import os
import sys
from threading import Thread
server = raw_input("Please enter a server name ")
def portConnect():
global num
try:
serv_ip = socket.gethostbyname(server) # connects to server through try
print "Please wait, scanning remote host", serv_ip
for port in range(num):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
connect = sock.connect_ex((serv_ip, port))
if connect == 0:
print "Port {}: Open".format(port)
sock.close()
except socket.gaierror:
print """
I can't find that server, idiot! Try again
"""
sys.exit()
for i in range(1):
t = Thread(target=portConnect,(num=100))
t.start()
我做错了什么?
答案 0 :(得分:1)
线程期望args=
作为元组,并将其作为参数发送到函数
这样您就可以100
作为第一个参数(num
)发送给portConnect()
def portConnect(num):
print(num)
# code
t = Thread(target=portConnect, args=(100,) )
要发送范围,您需要两个参数
def portConnect(from_, to_):
print(from_, to_)
for port in range(from_, to_):
# ...
size = 20
for i in range(1, 100, size):
t = Thread(target=portConnect, args=(i, i+size))
t.start()
BTW:模块scapy允许您发送单个数据包,因此它用于端口扫描,嗅探等。
您可以使用nmap
(GUI包装器:Zenmap)或Kali Linux
您可以尝试在Python中使用nmap
:python-nmap : nmap from python
答案 1 :(得分:0)
你可以使用nmap轻松解决这个问题。
nmap -p- <some_host>