Прошу у Вас помощи в решении вопроса, связанного с проведение расчётов.
Постараюсь объяснить простыми словами, если конечно смогу (((
Предполагаю что мой код вызовет у Вас уныние, поэтому сразу прошу прощения. Я хотел было выполнить расчёты в MS ms excel, но он как оказалось не может работать с такими большими таблицами!
Суть моих расчётов заключается в получении значений величины времени для каждого сетевого пакета, следующего от сервера port1 = 443 к клиенту port2 = 53023 в пределах которого значение sequence number будет находиться в окне клиента.
Например, берем пакет № 646700, в нем sequence number = 617352158, а из пакета № 646699 извлекаем значение окна клиента и считаем, до какого времени значение sequence number (передаваемых данных) сервером не превысит окно клиента, получаем значение времени, записываем в файл, берем следующий пакета с данными 646701 и т.д.
Интересуют только значение времени для пакетов, следующих от сервера к клиенту. Также в датафрейме присутствует изменение окна клиента, которое нужно учитывать.
П.С. Остальные значение NUMBJ, NUMBI, NUMBJ - NUMBI, WST не так важны, их можно и не рассматривать.
Код я конечно составил, но он выполняется он очень-очень медленно!
Имеется датафрейм data.csv, полученный экспортом из wireshark
“No.”,“Time”,“port1”,“port2”,“Seq”,“Ack”,“CWS”
“1”,“0.000000”,“53023”,“443”,“0”,“0”,“64240”
“2”,“0.039781”,“443”,“53023”,“0”,“1”,“64240”
“3”,“0.040341”,“53023”,“443”,“1”,“1”,“131840”
“4”,“0.048941”,“53023”,“443”,“1”,“1”,“131840”
…
“646699”,“384.921299”,“53023”,“443”,“678”,“617352158”,“4232192”
“646700”,“384.921432”,“443”,“53023”,“617352158”,“678”,“64128”
“646701”,“384.921432”,“443”,“53023”,“617353518”,“678”,“64128”
“646702”,“384.921432”,“443”,“53023”,“617354878”,“678”,“64128”
“646703”,“384.921432”,“443”,“53023”,“617356238”,“678”,“64128”
“646704”,“384.921432”,“443”,“53023”,“617357598”,“678”,“64128”
“646705”,“384.921749”,“53023”,“443”,“678”,“617358958”,“4232192”
“646706”,“384.921921”,“443”,“53023”,“617358958”,“678”,“64128”
…
“11200490”,“4052.560404”,“53023”,“443”,“678”,“2166491223”,“8464640”
“11200491”,“4052.560461”,“443”,“53023”,“2166491223”,“678”,“64128”
“11200492”,“4052.560461”,“443”,“53023”,“2166492583”,“678”,“64128”
“11200493”,“4052.560461”,“443”,“53023”,“2166493943”,“678”,“64128”
“11200494”,“4052.560544”,“53023”,“443”,“678”,“2166494291”,“8464640”
“11200495”,“4052.615866”,“53023”,“443”,“678”,“2166494291”,“0”
Код:
data = pd.read_csv("data.csv", delimiter=",") WST = 64240 SEQT = 0 for i in range(1,11200495): PI = data.at[i, "port1"] WSI = data.at[i, "CWS"] TI = data.at[i, "Time"] SEQI = data.at[i, "Seq"] NUMBI = data.at[i, "No."] j = i if SEQI + 1000000 < SEQT and PI == 443: SEQT = SEQI if SEQI > SEQT and PI == 443: SEQT = SEQI Buffer = WST while Buffer > 0: j = j + 1 PJ = data.at[j, "port1"] WSJ = data.at[j, "CWS"] TJ = data.at[j, "Time"] SEQJ = data.at[j, "Seq"] NUMBJ = data.at[j, "No."] if PJ == 443 and SEQJ > SEQT and Buffer > 0: SEQ = SEQJ - SEQI Buffer = WST - SEQ T = TJ - TI if PJ == 53023: WST = WSJ PJ = data.at[j - 1, "port1"] TJ = data.at[j - 1, "Time"] T = TJ - TI NUMBJ = data.at[j - 1, "No."] print(round(T, 5), NUMBJ, NUMBI, NUMBJ - NUMBI, WST, file=open("log.txt", "a")) if PI == 53023: WST = WSI
Еще не могу понять, как учесть тот момент, что sequence number имеет значения от 0 до 2^32 и в пределах датафрейма несколько раз начинается снова начинается от 0:
Пример:
“4476457”,“1613.231656”,“443”,“53023”,“4294963577”,“678”,“64128”
“4476458”,“1613.231764”,“53023”,“443”,“678”,“4294964937”,“8464640”
“4476459”,“1613.231858”,“443”,“53023”,“4294964937”,“678”,“64128”
“4476460”,“1613.231858”,“443”,“53023”,“4294966297”,“678”,“64128”
“4476461”,“1613.231858”,“443”,“53023”,“361”,“678”,“64128”
“4476462”,“1613.232032”,“53023”,“443”,“678”,“1721”,“8464640”
“4476463”,“1613.232248”,“443”,“53023”,“1721”,“678”,“64128”
“4476464”,“1613.232248”,“443”,“53023”,“3081”,“678”,“64128”
“4476465”,“1613.232248”,“443”,“53023”,“4441”,“678”,“64128”
Моя безуспешная попытка переопределить значение результата не принесла, как только цикл доходит до этого значения - ошибка
if SEQI + 1000000 < SEQT and PI == 443: SEQT = SEQI
Заранее спасибо за помощь!