简体   繁体   中英

Python Port Scanner edit

I've been editing this port scanner for an information security project. The code works but throws errors (Pycharm Edu) on lines 63 and 34 in that order. The error message for line 63 is: 'line 63, in checkhost(target). I've looked at this and can't see why this would throw an error specifically as it is defined on line 34. The error message for line 34 is: 'NameError: global name 'conf' is not defined'. It's not clear why this is a problem either. Any help is much appreciated. The Python code environment is Python 2.7.10

#! /usr/bin/python
from logging import getLogger, ERROR # Import Logging Things
getLogger("scapy.runtime").setLevel(ERROR) # Get Rid if IPv6 Warning
import scapy
import sys
from datetime import datetime # Other stuff
from time import strftime

try:
target = raw_input("[*] Enter Target IP Address: ")
min_port = raw_input("[*] Enter Minumum Port Number: ")
max_port = raw_input("[*] Enter Maximum Port Number: ")
try:
if int(min_port) >= 0 and int(max_port) >= 0 and 
int(max_port) >= int(min_port): # Test for valid range of ports
        pass
    else: # If range didn't raise error, but didn't meet criteria
        print "\n[!] Invalid Range of Ports"
        print "[!] Exiting..."
        sys.exit(1)
except Exception: # If input range raises an error
    print "\n[!] Invalid Range of Ports"
    print "[!] Exiting..."
    sys.exit(1)
except KeyboardInterrupt: # In case the user wants to quit
print "\n[*] User Requested Shutdown..."
print "[*] Exiting..."
sys.exit(1)

ports = range(int(min_port), int(max_port)+1)
start_clock = datetime.now() # Start clock for scan time
SYNACK = 0x12 # Set flag values for later reference
RSTACK = 0x14

def checkhost(target): # Function to check if target is up
conf.verb = 0 # Hide output
try:
    ping = sr1(IP(dst = ip)/ICMP()) # Ping the target
    print "\n[*] Target is Up, Beginning Scan..."
except Exception: # If ping fails
    print "\n[!] Couldn't Resolve Target"
    print "[!] Exiting..."
    sys.exit(1)

def scanport(port): # Function to scan a given port
try:
    srcport = RandShort() # Generate Port Number
    conf.verb = 0 # Hide output
    SYNACKpkt = sr1(IP(dst = target)/TCP(sport = srcport, 
dport = port,flags = "S")) 
pktflags = SYNACKpkt.getlayer(TCP).flags
    if pktflags == SYNACK: # Cross reference Flags
        return True # If open, return true
    else:
        return False
RSTpkt = IP(dst = target)/TCP(sport = srcport, dport = port, 
flags = "R") # Construct RST packet send(RSTpkt)
except KeyboardInterrupt: # In case the user needs to quit
    RSTpkt = IP(dst = target)/TCP(sport = srcport, dport = port, 
flags = "R") send(RSTpkt)
    print "\n[*] User Requested Shutdown..."
    print "[*] Exiting..."
    sys.exit(1)

checkhost(ip) # Run checkhost() function from earlier
print "[*] Scanning Started at " + strftime("%H:%M:%S") + "!\n" 

for port in ports: # Iterate through range of ports
status = scanport(port) # Feed each port into scanning function
if status == True: # Test result
    print "Port " + str(port) + ": Open" # Print status

stop_clock = datetime.now() # Stop clock for scan time
total_time = stop_clock - start_clock # Calculate scan time
print "\n[*] Scanning Finished!" # Confirm scan stop

print "[*] Total Scan Duration: " + str(total_time) # Print scan time

The problem is with your import statement, it should be:

>>> import scapy
>>> from scapy.all import conf
>>> conf.verb = 0

or even better to get rid of possible similar errors in the future just import scapy as:

>>> from scapy.all import *
>>> conf.verb = 0

Now it should work fine.

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