LINUX.ORG.RU

RAW Socket & Python

 , ,


0

2

Решил написать маленький скрипт для отправки датаграмм с поддельным IP и портом. Прочитал: http://docs.python.org/2/library/socket.html,

http://hackermaycry.ru/?p=216,

http://ru.wikipedia.org/wiki/UDP

Стало быстро понятно что пакет придется составлять ручками.Уже приготовился к составлению пакета и наткнулся на это http://stackoverflow.com/questions/1117958/how-do-i-use-raw-socket-in-python после чего мой моз вывехнуло...

Отойдя принялся заполнять:

from socket import socket, AF_PACKET, SOCK_RAW
s = socket(AF_PACKET, SOCK_RAW)
src_addr = socket.inet_aton('239.255.0.100')
dst_addr = socket.inet_aton('127.0.0.1')
scr_port = socket.htons(123)
dst_port = socket.htons(25)

Насколько это правильно не знаю, и вообще не знаю что делать дальше) Помогите пожайлуста разобратся в этом количеств информации, а точнее укажите на правильную реализацию raw socket в python, и структуру UDP пакета.

Спасибо.

Почитай о структуре UDP-пакета (хотя бы по Вики), потом о модуле struct, заполни пакет, пошли его :)

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Вики я читал, модуль struct почитаю спасибо. Но все же я не совсем понимаю псевдозоголовок IPv4,

RFC 768

+--------+--------+--------+--------+ | source address | +--------+--------+--------+--------+ | destination address | +--------+--------+--------+--------+ | zero |protocol| UDP length | +--------+--------+--------+--------+

структура zero(На вики нули), сколько их? UDP length, динна данных или длинна всей датаграммы?

Объясните поконкретней пожалуйста.

demplers ()
src_addr = socket.inet_aton('123.123.123.123')
dst_addr = socket.inet_aton('127.0.0.1')
Nulss="\x00"
Protocol="\x11"
LengthUDP="\x1C" #28 byte
scr_port = socket.htons(123)
dst_port = socket.htons(25)
Length="\x08" #8 byte
checksum = "\x00\x00\"
data=""

Вот накидал датаграмму без полезной нагрузкуи, хотел бы узнать правильно или нет? Если да то далее следует struct.pack, и сама отправка?

demplers ()
Ответ на: комментарий от demplers

структура zero(На вики нули), сколько их? UDP length, динна данных или длинна всей датаграммы?

Кхм. С такими вопросами, тебе нужно идти читать RFC, начиная от уровня IP.

И кстати, если тебе нужно подделать только IP и порты в UDP-датаграмме, лучше использовать socket(socket.AF_INET, socket.SOCK_RAW, 0x11) - не нужно будет конструировать ethernet-кадр.

tailgunner ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.