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为您维护资源。