Справочная информация. Таким образом, нам предоставили этот сценарий в классе с целью открытия случайных непривилегированных портов на наших виртуальных машинах Ubuntu. Он дал нам два примера TCP и попросил нас открыть еще два дополнительных порта TCP, а также два порта UDP. Мы должны были выполнить это, используя библиотеку сокетов и язык программирования Python.signal.alarm Предотвращение выполнения сценария
Поэтому я изначально сосредоточился на проблеме, которую он нам дал. Использование питона терминалу это был окончательный сценарий, прежде чем я первоначально казнен его, зная, что общие понятия откроют порты для подключения на 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 Docs: https://docs.python.org/2/library/signal.html
Unix человек страница сигнализации (2) http://unixhelp.ed.ac.uk/CGI/man-cgi?alarm+2
Глядя на странице человека для тревоги кажется, что она ожидает типа INT, так что я не уверен, что требуется явное преобразование данных. Хотя я также не уверен в общем направлении сценария. Профессор просто отдал его нам за бонус. Он сказал, что посмотрит на это, но я не уверен, когда он вернется ко мне.
Я думаю, что бит кода настроен так, что если один из открытых портов будет исследован, скрипт завершится. Если посмотреть на страницу man, кажется, что если возвращается int больше 0, будет генерироваться сигнал тревоги. Запуск завершения сценария. Хотя с индексом IndexError и не зная, какой индекс он имеет в виду, я не уверен, где сужаться, чтобы решить проблему.
Как вы используете свой сценарий? Вы на 100% уверены, что существует sys.argv [1]? Вы можете распечатать его заранее? –
Я попытался выполнить вызов, вызвав интерпретатор python, а также простой ./ScriptName.py. Я изменил строку кода для печати (signal.alarm (int (sys.argv [1]))) и все равно получает IndexError. –