Как я использую неструктурированный сокет в Python?

Здесь является моим; это записано на проблемно-ориентированном языке, который я изобрел, названный 'палиндромом'.

p

Редактирование: Меньше легкомысленной версии (i386 asm, AT& T синтаксис)

xor %eax, %eax
mov %esi, %edi
#cld    not necessary, assume DF=0 as per x86 ABI
repne scasb
scan:
    dec %edi
    cmpsb
    .byte 0x75, 6    #jnz (short) done
    dec %edi
    cmp %esi, %edi
    .byte 0x72, -9    #jb (short) scan
inc %eax
done:

16 байтов, указатель строки входит в ESI, результат находится в EAX.

34
задан Avihu Turzion 27 July 2009 в 06:59
поделиться

4 ответа

Является ли это старым кодом, который, как вы упомянули, находил? Мне это кажется разумным, но я сам не тестировал (или много использовал сырые сокеты). Этот пример из документации показывает, как использовать сырые сокеты для прослушивания пакетов, и он выглядит достаточно похоже.

2
ответ дан 27 November 2019 в 16:52
поделиться

Системные вызовы сокетов (или Winsocks в Windows) уже заключены в стандартный модуль socket : intro , ссылка ].

Я никогда не использовал сырые сокеты, но похоже, что их можно использовать с этим модулем:

В последнем примере показано, как написать очень простой сетевой сниффер с raw сокеты в Windows. Пример требует прав администратора для изменить интерфейс:

 импортный сокет

# публичный сетевой интерфейс
ХОСТ = socket.gethostbyname (socket.gethostname ())

# создать сырой сокет и привязать его к общедоступному интерфейсу
s = socket.socket (socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_IP)
s.bind ((ХОЗЯИН, 0))

# Включить заголовки IP
s.setsockopt (socket.IPPROTO_IP, socket.IP_HDRINCL, 1)

# получить все пакеты
s.ioctl (сокет.SIO_RCVALL, socket.RCVALL_ON)

# получить посылку
напечатать s.recvfrom (65565)

# отключен беспорядочный режим
s.ioctl (сокет.SIO_RCVALL, socket.RCVALL_OFF)
10
ответ дан 27 November 2019 в 16:52
поделиться

Класс сокета должен помочь. В противном случае вам нужно написать модуль Python на C или просто использовать C. См. http://mail.python.org/pipermail/python-list/2001-April/077454.html .

Базовый поиск в Google обнаружил это.

Я действительно пробовал пример кода, на который указал "раскрутка". AF_PACKET работал у меня в python 2.7.4

0
ответ дан 27 November 2019 в 16:52
поделиться

В конце концов, лучшим решением для этого случая было написать все на C, потому что это небольшое приложение, поэтому написать такую ​​мелочь на более чем 1.

После долгих экспериментов с сокетами C и python RAW я в конце концов предпочел сокеты C RAW. Сокеты RAW требуют модификации на уровне битов менее 8-ми битных групп для записи заголовков пакетов. Иногда пишут всего 4 бита или меньше. python не определяет для этого никакой помощи, тогда как Linux C имеет для этого полный API.

Но я определенно верю, что если бы только эта небольшая инициализация заголовка была удобно обработана в python, я бы никогда не использовал здесь C.

]
2
ответ дан 27 November 2019 в 16:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: