简体   繁体   English

带有线程的Python端口扫描仪

[英]Python Port Scanner with Threading

I am trying to create a port scanner in Python. 我正在尝试在Python中创建端口扫描程序。 I got the scanner going but it takes forty five minutes to print results. 我使用了扫描仪,但打印结果需要四十五分钟。 I started to institute threading however I can't figure out how to put different ranges into the script. 我开始建立线程,但是我不知道如何在脚本中放入不同的范围。 I started to go to creating a global variable and try to pass that along in each thread. 我开始创建一个全局变量,并尝试在每个线程中传递它。 Unfortunately it's not working correctly and I am getting an invalid syntax error. 不幸的是,它无法正常工作,并且我收到了无效的语法错误。 Below is the code. 下面是代码。

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()

What am I doing wrong? 我究竟做错了什么?

Thread expects args= as tuple and it sends it as arguments to function 线程期望args=作为元组,并将其作为参数发送给函数

This way you send 100 as first argument ( num ) to portConnect() 这样,您将100作为第一个参数( num )发送到portConnect()

 def portConnect(num):
     print(num)
     # code

 t = Thread(target=portConnect, args=(100,) )

To send range you need two arguments 要发送范围,您需要两个参数

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: module scapy lets you send single packet so it is used for portscanning, sniffing, etc. 顺便说一句:模块scapy可让您发送单个数据包,因此可用于端口扫描,嗅探等。

You can do more with special tools like nmap (GUI wrapper: Zenmap ) or Kali Linux 您可以使用nmap (GUI包装器: Zenmap )或Kali Linux等特殊工具完成更多工作

You may try to use nmap in Python: python-nmap : nmap from python 您可以尝试在Python中使用nmappython-nmap:来自python的nmap

您可以使用nmap轻松解决此问题。

nmap -p- <some_host>

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM