2014-10-31 1 views
0

У меня есть python, scapy мир кода, который хранит мои данные в базе данных (IP src и dst, ports, ..) , которые я использую для некоторых статистических данных. На некоторых пакетах я делаю некоторые манипуляции (меняя dst-порт), а затем отправляю их обратно на интерфейс.scapy управление пакетами и оригинал pkt.time

Проблема в том, что этот пакет, с которым я манипулировал, имеет другое значение pkt.time, чем исходное значение , и если я храню эти пакеты в базе данных, у них разное время пакета, то они изначально были.

Есть ли опция и возможность создания пакета UDP для установки исходного значения pkt.time? С помощью этой опции задержка пакетной обработки не вызовет беспорядка с моими пакетами.

Любая помощь приветствуется

Ниже мой манипуляция сценарий

#!/usr/bin/env python 

from scapy.all import * 

# VARIABLES 
interface = 'eth1' 
filter_bpf = "port 8000" 

def pkt_change(pkt): 
    if pkt.haslayer(UDP): 
     # --> pkt.time is packet time 
     ts = pkt.time 
     src = pkt[IP].src 
     dst = pkt[IP].dst 
     sport = pkt[IP].sport 
     dport = pkt[IP].dport 
     msg = pkt[IP].load 

     #### Spoof Response 
     changed_pkt = Ether()/IP(dst=dst, src=src)/UDP(dport=8000, sport=sport)/msg 

     sendp(changed_pkt, iface="eth1") 
     print 'Sent:', changed_pkt.summary() 

# ------------------------------------------------ 
# start sniffing 
print "Start Sniffing" 
sniff(iface=interface, filter=filter_bpf, store=0, prn=pkt_change) 

ответ

1

После создания changed_pkt, вы можете просто установить его атрибут time следующим образом:

changed_pkt.time = ts 

Обратите внимание, что даже после изменения отметка времени пакета и ее отправка, обновленная временная метка не будет отражена в полученном пакете на другом конце, так как t его метка времени устанавливается на приемной машине по мере приема пакета, как описано here.

Если вы заинтересованы в передаче пакетов на удаленный компьютер, сохраняя их временную метку, рассмотрите возможность хранения управляемых пакетов в файле pcap и отправке этого файла на другой компьютер.

+0

thx. хорошая точка, но даже если я установил change_pkt.time время пакета не изменилось. Кажется, меня это нельзя изменить. – user1627588

+0

Что значит? Как вы проверяете, изменилось ли это? – Yoel

+0

Я проверяю, что с интерфейсом, и под деревом подкачки, есть время и время прибытия – user1627588