Python - Как остановить функцию - PullRequest
0 голосов
/ 17 марта 2019

Я пытаюсь сделать какой-то анализатор протокола инициации сеанса. Я использую модуль pyshark для python, который предлагает мне некоторые функции для перехвата пакетов из интерфейса. Дело в том, что есть функция с именем sniff(), которая, когда я даю параметр packet_count=0, проверяет пакеты на неопределенный срок, пока я не остановлю всю программу.

Что я хочу знать, если есть способ остановить функцию cap.sniff() и получить cap._packets (который является списком), а затем запустить остальную часть программы.

Вот код, который я сделал:

def sniffsip():
    cap = pyshark.LiveCapture(interface='Ethernet')
    cap.sniff(packet_count=0)#This is function sniff() that checks for packets

    udp_packets = []

    for i in cap._packets:
        j = cap._packets.index(i)
        if cap._packets[j].transport_layer == 'UDP' and cap._packets[j].highest_layer == 'SIP':
            udp_packets.append(cap._packets[j])

    return udp_packets

1 Ответ

0 голосов
/ 17 марта 2019

Полагаю, вы просто хотите разорвать этот цикл.

stop_flag = False # It is a global variable, you can set it in other functions

def sniffsip():
    global stop_flag # Our global variable...
    cap = pyshark.LiveCapture(interface='Ethernet')
    cap.sniff(packet_count=0)

    udp_packets = []

    for i in cap._packets:
        j = cap._packets.index(i)
        if cap._packets[j].transport_layer == 'UDP' and cap._packets[j].highest_layer == 'SIP':
            udp_packets.append(cap._packets[j])
        if stop_flag: # Here check the state of the flag
           stop_flag = False # Do not forget to set it false if you want to use the function again.
           break # Break the cycle

    return udp_packets
...