简体   繁体   中英

Python Port Scanner with Threading

I am trying to create a port scanner in 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

This way you send 100 as first argument ( num ) to 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.

You can do more with special tools like nmap (GUI wrapper: Zenmap ) or Kali Linux

You may try to use nmap in Python: python-nmap : nmap from python

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

nmap -p- <some_host>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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