python - Python 2.7(套接字) - 如果在前一个端口上发生 socket.error,如何在下一个端口上继续
问题描述
我正在编写简单的扫描脚本,它会扫描 IP 列表中的所有开放端口并检查它们的横幅。
我有一个问题,当socket.error
其中一个端口发生时,脚本退出并且不会继续在下一个端口和列表中的下一个 IP 上抓取横幅。
如何修改我的脚本,以便如果socket.error
发生它会继续扫描而不退出?
print "+" * 40
starting_time = time.time()
print " Scanning started at %s" % (time.strftime("%I:%M:%S %p"))
print "+" * 40
print "+" * 40
ip_parts1 = host.split('.')
h = ip_parts1[0] + '.' + ip_parts1[1] + '.' + ip_parts1[2] + '.' + ip_parts1[3]
print "\033[1;31m"
lst1 = map_network0()
try:
for h in lst1[:]:
for port in range(1, 1024):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((h, port))
if result == 0:
byte = str.encode("Server:\r\n")
sock.send(byte)
ans = sock.recv(512)
socket.setdefaulttimeout(2)
print h, ("......port " + '{0}'.format(port) + "/Open/" + '{0}'.format(ans))
sock.close()
except KeyboardInterrupt:
print ("Scanner aborted")
sys.exit()
except socket.gaierror:
print ('Hostname could not be resolved. Exiting')
sys.exit()
except socket.error:
print ("Couldn't connect to server")
sys.exit()
解决方案
最后,我做到了。我将异常添加到循环中。因此,现在如果发生错误,它将通过端口并继续扫描下一个端口。
try:
for h in lst1[:]:
for port in range(1, 1024):
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
result = sock.connect_ex((h, port))
try:
if result == 0:
byte = str.encode("Server:\r\n")
sock.send(byte)
socket.setdefaulttimeout(2)
ans = sock.recv(512)
print h, ("......port " + '{0}'.format(port) + "/Open/" + '{0}'.format(ans))
sock.close()
except socket.error:
print
print ("Couldn't connect to server " + h + " port: "'{0}'.format(port))
pass
except KeyboardInterrupt:
print ("Scanner aborted")
sys.exit()
except socket.gaierror:
print ('Hostname could not be resolved. Exiting')
sys.exit()
except socket.error:
print ("Couldn't connect to server")
pass
推荐阅读
- python - 将 _io.BufferedReader 转换为 str 以进行 write()
- javascript - 如何在每列的末尾显示显示隐藏选项
- javascript - Hyperledger-Composer:无法从事务处理器函数中访问 javaScript split() 函数
- graphql - AppSync订阅授权问题
- javascript - Express.js 两个路由,例如单个模块中的注册和登录
- javascript - 在 HERE 地图上设置上下文菜单
- scala - 如何旋转 Spark 数据框表?
- sql-server - 同一张表在 SQL Server 中执行多项操作
- sharepoint - 如何通过 GraphAPI 在 SharePoint 列表中插入数据?
- python - 为什么我的日期元素在 MySQL(终端)中以这种格式显示:datetime.date(2018, 6, 30)?