背景:所以我們在課堂上提供了這個腳本,目的是在我們的Ubuntu虛擬機上打開隨機非特權端口。他給了我們兩個TCP示例,並要求我們打開另外兩個TCP端口以及兩個UDP端口。我們將使用套接字庫和Python編程語言完成此任務。signal.alarm防止腳本執行
所以我最初着眼於他給我們的問題。使用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 VM劇本我收到以下錯誤信息:
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類型的報警男子頁確信明確的數據轉換是必要的。雖然我對劇本的總體方向也沒有信心。教授只是給了我們獎金。他說他會看看,但我不確定他什麼時候會回到我身邊。
我在想這樣的代碼是設置,如果其中一個打開的端口被探測,腳本將終止。看看手冊頁,似乎如果返回的int大於0,則會生成警報。觸發腳本的終止。儘管使用IndexError並且不知道它指的是什麼索引,但我不確定要在哪裏縮小以解決問題。
你是如何運行腳本?你是否100%確定sys.argv [1]存在?你能事先打印嗎? – 2014-08-29 01:37:26
我已經嘗試通過調用python解釋器以及一個簡單的./ScriptName.py來執行。我修改了打印的代碼行(signal.alarm(int(sys.argv [1]))),仍然收到IndexError。 – 2014-08-29 01:42:28