我正在用Python编写一个程序,它的一部分是扫描网站上的活动端口。在scanports模块中,如果我说scanports 79到81,我知道它应该返回一个包含80的列表。我知道这一点是肯定的,因为当我运行scanport时,它显示端口80已启动。很抱歉没有任何评论:
import subprocess, socket, urllib2, sys
class pymap:
def __init__(self):
pass
################################################################################
################################################################################
def host(self, host):
self.host = host
socket1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock = socket1
################################################################################
################################################################################
def getip(self):
if self.host == None:
print "Specify a host first."
else:
return socket.gethostbyname(self.host)
################################################################################
################################################################################
def scanports(self, start, end):
ports = []
self.sock.settimeout(0.000001)
for i in xrange(start, end+1): #49151
try:
self.sock.connect((self.host, i))
ports.append(i)
except:
pass
return i
################################################################################
################################################################################
def scanport(self, port1):
self.sock.settimeout(0.000001)
try:
self.sock.connect((self.host, port1))
return 1
except:
return 0
################################################################################
################################################################################
def traceroute(self):
if self.host == None:
print "Specify a host first."
else:
proc=subprocess.Popen(('tracert', self.host), shell=True, stdout=subprocess.PIPE)
output=proc.communicate()[0]
return output
################################################################################
################################################################################
def getsource(self, url):
page = urllib2.urlopen(url)
return page.read()
################################################################################
################################################################################
x = pymap()
x.host("www.google.com")
print x.scanports(70, 85)
print x.scanport(80)
编辑: 我修改了它,感谢jameshenstridge指出我使用的是迭代变量,否则会更困难。但是,它仍然不起作用:
^{pr2}$编辑:我想出来了,这是个问题端口.append,谢谢你的帮助。在
您的代码存在一些问题:
您的
scanports
方法返回循环迭代变量,因此无论它检测到什么端口,它都将始终返回end
。也许您想返回ports
列表?你在重复使用同一个套接字。从
connect
系统调用手册页:因此,如果要测试多个连接尝试,请每次创建一个新的套接字。使用后也应关闭这些插座。
相关问题 更多 >
编程相关推荐