[Tutor] First Project - Ping Sweeper!
Trent Rigsbee
sweetdaddysiki at hotmail.com
Tue Jul 12 16:11:55 CEST 2005
Hi! I've completed Learning to Program (off the website) and I've started to
play around with code that I've found on Useless Python. I'm ready to start
my first project! This may be way over my head, but I want to make a ping
sweeper (put a range of IP addresses & ping to see which are vaild). I'm
playing around with Mark Kels' Port Scanner off of Useless Python and I
wanted to modify this for pinging but I'm stuck. I've ordered Network
Programming for Python but I've started to play around with this until the
book arrives. Any suggestions? Should I throw in the towel and make
something simpler instead? Thanks! Here's the code that I'm tinkering with:
#A simple port scanner to scan a range of ports on a single host.
#Developers:
# 1.Mark Kels (mark.kels at gmail.com) - The basic port scanner
#Last updated:
# 21.5.2005
#----------Imports----------
from Tkinter import * #Used to make the GUI
import tkMessageBox #Used for error display
import socket #Used for connecting to ports
import threading #Used to make a difrent thread for the scan so it could be
stopped
#--- Function to start a scan ---
def go():
global app
result.delete(1.0,END)
app=scan()
app.start() #start() is definde in threading.Thread
#--- Function to stop a scan ---
def stop():
app.flag='stop'
#--- Function to clear the input and output ---
def clear():
host_e.delete(0,END)
start_port_e.delete(0,END)
end_port_e.delete(0,END)
result.delete(1.0,END)
#---The scan class which does the port scan itself---
class scan(threading.Thread):
def _init_(self):
threading.thread._init_(self)
def run(self):
self.host=host_e.get()
self.start_port=int(start_port_e.get())
self.end_port=int(end_port_e.get())
self.open_counter=0
self.flag='scan'
start.config(text="Stop",command=stop)
root.update()
result.insert(END,"Scanning "+str(self.host)+"...\n\n")
root.update()
while self.start_port<=self.end_port and self.flag=='scan':
self.sk=socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sk.settimeout(0.01) #closed ports take a long time to
connect to, so if there is no connection after 0.01 seconds the port is
closed
try:
self.sk.connect((self.host,self.start_port))
except:
pass #if connection fails (port is closed) pass and try with
another port
else:
result.insert(END,str(self.start_port)+"\n")
root.update()
self.open_counter=self.open_counter+1
self.sk.close()
self.start_port=self.start_port+1
if self.flag=='scan':
result.insert(END,"\nDone !!\nFound "+str(self.open_counter)+"
opened ports")
root.update()
start.config(text="Scan",command=go)
root.update()
elif self.flag=='stop':
result.insert(END,"\n Scan stopped.")
start.config(text="Scan",command=go)
root.update()
#---The GUI---
root=Tk()
Label(root,text="Host: ").grid(row=1,column=1,sticky="w")
host_e=Entry(root)
host_e.grid(row=1,column=2,sticky="WE")
Label(root,text="Start port: ").grid(row=2,column=1,sticky="w")
start_port_e=Entry(root)
start_port_e.grid(row=2,column=2,sticky="WE")
Label(root,text="End port: ").grid(row=3,column=1,sticky="w")
end_port_e=Entry(root)
end_port_e.grid(row=3,column=2,sticky="WE")
start=Button(root,text="Scan",command=go)
start.grid(row=5,columnspan=3,sticky="WE")
clear=Button(root,text="Clear",command=clear)
clear.grid(row=6,columnspan=3,sticky="WE")
result=Text(root,width=20,height=20)
result.grid(row=7,columnspan=3,sticky="WENS")
root.wm_maxsize(width='190',height='370') #Set max size
root.wm_minsize(width='190',height='370') #Sat min size same as max size (so
the window is unresizeable)
root.title("PPS 0.1") #Set the title of the window
root.mainloop()
More information about the Tutor
mailing list