Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9

Как создать ip-заголовок через struct.pack?

19.07.2013, 18:52. Показов 2385. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
После упаковки структуры, должна получиться строка длиной 20 байт. А получается 14 байт.
Помогите правильно упаковать.
Python
1
2
3
4
5
TTL = 40
lenght = 0
my_checksum = 0
header_ip = struct.pack("bbhhhbbHss", 0x45, 0, lenght, 0, 0x4001, TTL, 1, my_checksum, socket.inet_aton('123.123.123.123'),socket.inet_aton('127.0.0.1'))
print len(header_ip) #20
Добавлено через 23 минуты
Все, разобрался. Надо было указать длину строки
Python
1
header_ip = struct.pack("bbhhhbbH4s4s", 0x45, 0, lenght, 0, 0x4001, TTL, 1, my_checksum, socket.inet_aton('123.123.123.123'),socket.inet_aton('127.0.0.1'))
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
19.07.2013, 18:52
Ответы с готовыми решениями:

Как использовать struct.pack()?
Повторяю пример из книги Лутца >>> F = open(‘data.bin’, ‘wb’) # Открыть файл для записи в двоичном режиме >>> import struct...

Неправильное преобразование в byte используя struct.pack
Здравствуйте! Имеется функция, преобразующая объект в последовательность байтов. Вот она: def __bytes__(self): surbyte =...

Как через pack() запаковать массив с string значениями?
// Создаю массив $aYearColor = array_fill(0,366,'#FFFFFF'); // Запаковываю его $aYearColorBlob = pack('a*', ...$aYearColor); //...

7
42 / 42 / 7
Регистрация: 15.07.2012
Сообщений: 98
20.07.2013, 17:53
Почему не scapy?
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
20.07.2013, 20:19  [ТС]
Scapy в моих кривых руках не хочет работать
Даже простой ICMP-пакет не получается принять
Python
1
2
a=IP(src="127.0.0.1",dst="127.0.0.2")/ICMP()/"icmpdata"
send (a)
Сниффер вроде работает
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# автор Рыжий Лис
import os, re, sys, socket, struct, select, datetime, time, threading, thread, string
from time import sleep
try:
  s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP) #) ) )
except socket.error, (errno, msg):
  if errno == 1:
    msg = msg + ' - Note: running as root.'
    raise socket.error(msg)
  raise # raise the original error
s.bind(('', 0))
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
print "Sniffer Started"
while 1:
  packet, addr = s.recvfrom(65565)
  #| [:20]-IP | [20:28]-ICMP |
  print 'ip источника:\t'+str(ord(packet[12]))+'.'+str(ord(packet[13]))+'.'+str(ord(packet[14]))+'.'+str(ord(packet[15]))
  print 'ip назначения:\t'+str(ord(packet[16]))+'.'+str(ord(packet[17]))+'.'+str(ord(packet[18]))+'.'+str(ord(packet[19]))
  #string.join(str(ord(i)) for i in recPacket[16:20])
  icmpHeader = packet[20:28]
  typep, code, checksum, packetID, sequence = struct.unpack("bbHHh", icmpHeader)
  data = packet[28:]
  print datetime.datetime.now().strftime("%H:%M:%S> ")+data
  print string.join(hex(ord(i)) for i in packet)
  №print len (packet)
  print packet


Добавлено через 5 минут
Пакет вроде отправляет
Bash
1
2
3
4
5
6
7
8
9
10
11
root@0000# scapy
INFO: Can't import python gnuplot wrapper . Won't be able to plot.
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
WARNING: Failed to execute tcpdump. Check it is installed and in the PATH
WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.2.0)
>>> a=IP(src="127.0.0.1",dst="127.0.0.2")/ICMP()/"icmpdata"
>>> send (a)
.
Sent 1 packets.
>>>
Добавлено через 1 минуту
А сниффер молчит
0
42 / 42 / 7
Регистрация: 15.07.2012
Сообщений: 98
20.07.2013, 23:07
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
А сниффер молчит
а если взять wireshark?
2
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
21.07.2013, 01:29
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Scapy в моих кривых руках не хочет работать
Даже простой ICMP-пакет не получается принять
Python
1
2
a=IP(src="127.0.0.1",dst="127.0.0.2")/ICMP()/"icmpdata"
send (a)
Сниффер вроде работает
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# автор Рыжий Лис
import os, re, sys, socket, struct, select, datetime, time, threading, thread, string
from time import sleep
try:
  s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_ICMP) #) ) )
except socket.error, (errno, msg):
  if errno == 1:
    msg = msg + ' - Note: running as root.'
    raise socket.error(msg)
  raise # raise the original error
s.bind(('', 0))
s.setsockopt(socket.IPPROTO_IP, socket.IP_HDRINCL, 1)
print "Sniffer Started"
while 1:
  packet, addr = s.recvfrom(65565)
  #| [:20]-IP | [20:28]-ICMP |
  print 'ip источника:\t'+str(ord(packet[12]))+'.'+str(ord(packet[13]))+'.'+str(ord(packet[14]))+'.'+str(ord(packet[15]))
  print 'ip назначения:\t'+str(ord(packet[16]))+'.'+str(ord(packet[17]))+'.'+str(ord(packet[18]))+'.'+str(ord(packet[19]))
  #string.join(str(ord(i)) for i in recPacket[16:20])
  icmpHeader = packet[20:28]
  typep, code, checksum, packetID, sequence = struct.unpack("bbHHh", icmpHeader)
  data = packet[28:]
  print datetime.datetime.now().strftime("%H:%M:%S> ")+data
  print string.join(hex(ord(i)) for i in packet)
  №print len (packet)
  print packet


Добавлено через 5 минут
Пакет вроде отправляет
Bash
1
2
3
4
5
6
7
8
9
10
11
root@0000# scapy
INFO: Can't import python gnuplot wrapper . Won't be able to plot.
INFO: Can't import PyX. Won't be able to use psdump() or pdfdump().
WARNING: Failed to execute tcpdump. Check it is installed and in the PATH
WARNING: No route found for IPv6 destination :: (no default route?)
Welcome to Scapy (2.2.0)
>>> a=IP(src="127.0.0.1",dst="127.0.0.2")/ICMP()/"icmpdata"
>>> send (a)
.
Sent 1 packets.
>>>
Добавлено через 1 минуту
А сниффер молчит
Scapy по дефолту отправляет пакеты не в сетевую карту а в кольцо loopback. Если перехватываешь снифером смотри lo а не ethXX.

Добавлено через 6 минут
Bash
1
2
3
4
5
>>> a=IP(src="127.0.0.1",dst="127.0.0.2")/ICMP()/"icmpdata"
>>> send(a*10)
..........
Sent 10 packets.
>>>
2
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
21.07.2013, 01:33
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.07.2013, 15:30  [ТС]
Цитата Сообщение от s0rg Посмотреть сообщение
а если взять wireshark?
wireshark нормально принял
Цитата Сообщение от fanatdebian Посмотреть сообщение
Scapy по дефолту отправляет пакеты не в сетевую карту а в кольцо loopback
А как отправить на сетевую карту eth0?
Миниатюры
Как создать ip-заголовок через struct.pack?  
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5972 / 3734 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.07.2013, 16:42  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
А как отправить на сетевую карту eth0?
Так?
Bash
1
2
3
4
5
>>> a=IP(src="127.0.0.1",dst="127.0.0.2")/ICMP()/"icmpdata"
>>> sendp(a, iface="eth0")
.
Sent 1 packets.
>>>
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.07.2013, 16:42
Помогаю со студенческими работами здесь

Как правильно создать структуру (struct)?
Всем добрый день, Мне нужно просто создать струкутру, в который будет 3 значения: ip, login, password. Далее я ее буду использовать,...

Как создать struct из PORT-ов в (CVAVR 3.10)?
Необходимо сделать примерно так: struct PORTnew { PORTA.1 PORTB.2 PORTC.3 PORTD.4 ...

Как исправить ошибку: Struct contents reference from a non-struct array object
Здравствуйте. Недавно начал работать с симулинк тест менеджером и еще не знаю всех тонкостей работы с ним. При создании Custom Criteria...

Создать приложение в Delphi, в котором по нажатию кнопки у формы будет меняться заголовок через каждые 2 секунды
очень-очень нужна помощь....

Как создать Большой заголовок
Как создать Большой заголовок с кнопками как в программах Win7 в стиле Aero


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

Новые блоги и статьи
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK сделайте это, JDK, то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Перейдите по ссылке:. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru