我正在用 Python 编写一个程序,其中一部分是扫描网站上的活动端口。在模块扫描端口中,如果我说扫描端口 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)
编辑:我改变了它,感谢 James Henstridge 指出我正在使用迭代变量,否则会更难。但是,它仍然不起作用:
    def scanports(self, start, end):
        ports = []
        self.sock.settimeout(3)
        for i in xrange(start, end+1):  #49151
            try:
                self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
                self.sock.connect((self.host, port1))
                self.sock.close()
                ports.append(i)
            except:
                pass
            return ports
编辑:我想通了,ports.append 有问题,感谢您的帮助。