python中portscanner的问题

python中portscanner的问题,python,cybersecurity,Python,Cybersecurity,有一个网络安全课程,其中一个练习是制作端口扫描仪。我认为我的方法可行,但即时反馈仍然不能给我分数。以下是练习: import sys import socket def get_accessible_ports(address, min_port, max_port): found_ports = [] # write code here return found_ports def main(argv): address = sys.argv[1]

有一个网络安全课程,其中一个练习是制作端口扫描仪。我认为我的方法可行,但即时反馈仍然不能给我分数。以下是练习:

import sys
import socket


def get_accessible_ports(address, min_port, max_port):
    found_ports = []

    # write code here

    return found_ports


def main(argv):
    address = sys.argv[1]
    min_port = int(sys.argv[2])
    max_port = int(sys.argv[3])
    ports = get_accessible_ports(address, min_port, max_port)
    for p in ports:
        print(p)

# This makes sure the main function is not called immediatedly
# when TMC imports this module
if __name__ == "__main__":
    if len(sys.argv) != 4:
        print('usage: python %s address min_port max_port' % sys.argv[0])
    else:
        main(sys.argv) 
import sys
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


def get_accessible_ports(address, min_port, max_port):
    found_ports = []
    

    while min_port <= max_port:
        try:
            s.connect(address, min_port)
                                
        except:
            
            min_port += 1
            continue
        else:
            
            found_ports.append(min_port)
            min_port += 1
            continue
           

    return found_ports


def main(argv):
    address = sys.argv[1]
    min_port = int(sys.argv[2])
    max_port = int(sys.argv[3])
    ports = get_accessible_ports(address, min_port, max_port)
    for p in ports:
        print(p)

# This makes sure the main function is not called immediatedly
# when TMC imports this module
if __name__ == "__main__": 
    if len(sys.argv) != 4:
        print('usage: python %s address min_port max_port' % sys.argv[0])
    else:
        main(sys.argv)
对于此分配,您应该编写get_accessible_ports方法扫描给定范围的端口所需的代码。该方法应扫描给定地址的端口,然后返回具有侦听服务的端口列表

请注意,测试服务器不会提交任何数据;你不应该试图接收任何数据

这是我的代码:

import sys
import socket


def get_accessible_ports(address, min_port, max_port):
    found_ports = []

    # write code here

    return found_ports


def main(argv):
    address = sys.argv[1]
    min_port = int(sys.argv[2])
    max_port = int(sys.argv[3])
    ports = get_accessible_ports(address, min_port, max_port)
    for p in ports:
        print(p)

# This makes sure the main function is not called immediatedly
# when TMC imports this module
if __name__ == "__main__":
    if len(sys.argv) != 4:
        print('usage: python %s address min_port max_port' % sys.argv[0])
    else:
        main(sys.argv) 
import sys
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)


def get_accessible_ports(address, min_port, max_port):
    found_ports = []
    

    while min_port <= max_port:
        try:
            s.connect(address, min_port)
                                
        except:
            
            min_port += 1
            continue
        else:
            
            found_ports.append(min_port)
            min_port += 1
            continue
           

    return found_ports


def main(argv):
    address = sys.argv[1]
    min_port = int(sys.argv[2])
    max_port = int(sys.argv[3])
    ports = get_accessible_ports(address, min_port, max_port)
    for p in ports:
        print(p)

# This makes sure the main function is not called immediatedly
# when TMC imports this module
if __name__ == "__main__": 
    if len(sys.argv) != 4:
        print('usage: python %s address min_port max_port' % sys.argv[0])
    else:
        main(sys.argv)
导入系统 导入套接字 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) def获取可访问的端口(地址、最小端口、最大端口): 找到的_端口=[]
当min_port时,所有可能的异常都被静音,而不是特定的异常(与连接问题相关),没有任何输出:

try:
   ...
except:
    ...
这就是为什么您忽略了地址的问题:socket.connect()接受
(主机、端口)
的元组。这是一个单一的论点,而不是两个

s.connect(地址,最小端口)
# ->
s、 连接((地址,最小端口))
除此之外,请尝试初始化函数内部的套接字,不要使用一个套接字测试所有端口:

def-fn(地址、最小端口、最大端口):

虽然min_port感谢您的回答,但现在它可以工作了:)。顺便说一句,在方法顶部初始化套接字和在循环内部初始化套接字有什么区别?我知道每次尝试都会生成一个新的套接字(s.connect((addr,min_port)),但这到底意味着什么?单个套接字可以进行的连接数量非常有限。如果您没有断开套接字与已检查端口的连接,则可能会达到极限。确保所有集合的简单方法就是每次使用新套接字,并在上下文管理器(
with
语句)中使用它,让python为您维护资源。