2013-03-14 3 views
0

Im пишущий код для взаимодействия с iptables nfqueue в системах Linux. Я могу получить пакеты очереди и изменить их, поскольку я хочу, однако у меня возникают проблемы с их получением через очередь.Python Scapy nfqueue

  payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(p), len(p)) 

Это линия, которая, насколько я понимаю, позволит ей пройти через очередь. p - новый пакет, который я создал, и полезная нагрузка - это пакет исходной очереди.

Там действительно нет слишком много документации, поэтому любая помощь будет оценена по достоинству. Благодаря

Это, как я создаю пакет

def queue_callback(i, payload) 

    data = payload.get_data() 
    packet = IP(data) 

Здесь я создаю пакет. Я делаю немного манипуляции пакетов, и это где я вернуть его

packet[TCP].payload = after; 

    return packet; 

После того как я вернуть пакет я пытаюсь обновить nfqueue в IPTables с помощью предыдущей команды

  p = modify(packet) 
      print p[TCP].payload 
      payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(p), len(p)) 

изменить функцию где я создаю новый пакет и возвращаю его.

+0

Не могли бы вы предоставить более подробную информацию о проблеме, а также код, в котором вы создаете 'p'? –

+0

Я обновил сообщение. Спасибо за помощь кстати, действительно нет документации для этого онлайн. Я посмотрел совсем немного. Проблема в том, что пакет изменяется, как я хочу. Полезная нагрузка tcp правильная, но я не знаю, как понравиться повторно принимать новый пакет. Пакет находится в очереди в брандмауэре iptables, а затем я хочу обновить пакет и затем разрешить его. Спасибо – CBaker

ответ

0

Я не понимаю, где вы изменяете пакет. Обычно ваши манипуляции пакет должен быть в спину вызова функции:

def cb(payload): 
    data = payload.get_data() 
    p = IP(data) 
    #Here you can manipulate the packet and modify it as you want 
    p[IP].src = "10.2.0.2" #change the src address for exemple 

    payload.set_verdict_modified(nfqueue.NF_ACCEPT, str(p), len(p)) 

, а затем вы вызываете функции обратного вызова после создания очереди:

q.set_callback(cb) 
    q = nfqueue.queue() 
    q.open() 
    q.create_queue(0) #Same queue number of the iptables rule 
+0

Вам удалось изменить полезную нагрузку? Потому что я не могу, если я это сделаю, я не получаю ответа. Нужно ли мне менять любой другой заголовок TCP/IP для его выполнения? – aDoN

+0

Я думаю, что если вы измените полезную нагрузку, вы должны пересчитать контрольную сумму. Это можно сделать, удалив старую контрольную сумму с помощью 'no p.checksum', тогда scapy автоматически пересчитает новую контрольную сумму. – HaTiMuX

Смежные вопросы