背景:所以我们在课堂上获得了这个脚本,目的是在我们的Ubuntu上打开随机的非特权端口。他给出了两个TCP示例,并要求我们打开另外两个TCP端口和两个UDP端口。我们将使用套接字库和Python编程语言来完成这一任务。
所以我最初关注的是他给我们的问题。使用python终端--这是我最初执行它之前的最后脚本--知道一般概念将打开Linux来宾上连接的端口:
#!/usr/bin/env python
import signal
import socket
import sys
import time
import os
s1 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s2 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s3 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s4 = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s5 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
s6 = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
def tcp_server() :
TCP_IP = '127.0.0.1'
s1.bind((TCP_IP, 6005))
s2.bind((TCP_IP, 1123))
s3.bind((TCP_IP, 6009))
s4.bind((TCP_IP, 1124))
s5.bind((TCP_IP, 6006))
s6.bind((TCP_IP, 6007))
s1.listen(1)
s2.listen(2)
s3.listen(3)
s4.listen(4)
tcp_server()
def SigAlarmHandler(signal, frame) :
print("Received alarm TCP server is shutting down")
sys.exit(0)
signal.signal(signal.SIGALRM, SigAlarmHandler)
signal.alarm(int(sys.argv[1]))
while True :
pass当我在Ubuntu上执行脚本时,会收到以下错误消息:
Traceback (most recent call last):
signal.alarm(int(sys.argv[1]))
IndexError: list index out of range所以我挖了一下,找到了这两个小块信息。
signal.alarm Python:https://docs.python.org/2/library/signal.html
Unix手册页报警(2) http://unixhelp.ed.ac.uk/CGI/man-cgi?alarm+2
查看告警手册页,它似乎期待一个int类型,所以我不相信显式的数据转换是必要的。虽然我对脚本的总体方向也没有信心。教授刚给了我们奖金。他说他会看的,但我不确定他什么时候会回来找我。
我认为这段代码是设置好的,如果一个打开的端口被探测到,脚本就会终止。查看手册页,如果返回大于0的int,就会产生警报。触发脚本的终止。虽然使用IndexError而不知道它所指的是什么索引,但我不知道在哪里可以缩小范围来解决这个问题。
发布于 2014-08-29 01:40:03
最有可能的解释是,您没有向脚本传递任何命令行参数,而引发IndexError的是IndexError。与信号或插座无关。
使用./ScriptName.py 5调用您的脚本,它应该可以工作,警报将在5秒后启动,您的服务器应该退出。
如果您不熟悉sys.argv,请参考:
https://stackoverflow.com/questions/25560359
复制相似问题