Введение необработанных пакетов TCP с Python

Каков был бы подходящий способ ввести необработанный пакет TCP с Python? Например, у меня есть полезная нагрузка, состоящая из шестнадцатеричных чисел, и я хочу отправить ту последовательность шестнадцатеричных чисел сетевому демону: так, чтобы, если я принимаю решение отправить 'abcdef', я видел 'abcdef' на проводе также. Но не '6162636566' как в случае:

new = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
new.connect(('127.0.0.1', 9999))
new.send('abcdef')

Я могу использовать SOCK_RAW Python с этой целью? Если так, можете Вы давать мне пример отправки необработанных пакетов TCP с SOCK_RAW (так как я не получил его работа сам),

Спасибо!

Evgeniy

5
задан Evgeniy Arbatov 26 May 2010 в 10:38
поделиться

4 ответа

Похоже, вас могут запутать символьные строки Python. Например, попробуйте:

new.send('\x0a\x0b\x0c\x0d\x0e\x0f')
1
ответ дан 18 December 2019 в 14:42
поделиться

Почему бы просто не преобразовать вашу строку в шестнадцатеричный перед отправкой?

new = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
new.connect(('127.0.0.1', 9999))
mydata = 'abcdef'
new.send(mydata.encode('hex'))
1
ответ дан 18 December 2019 в 14:42
поделиться

Для необработанных сокетов лучше всего подходит SOCK_RAW. Помните, что когда вы используете SOCK_RAW, вы не можете просто отправить полезную нагрузку. Вам также нужно будет выполнить формирование заголовка. После того, как вы сделаете это правильно, вы можете столкнуться с проблемами в операционной системе. Выполняя Raw Sockets в Windows XP, мы столкнулись с некоторыми проблемами из-за проблем с безопасностью.

1
ответ дан 18 December 2019 в 14:42
поделиться

Попробуйте scapy , мощную интерактивную программу управления пакетами.

Пример:

%> sudo scapy

>>> packet1 = IP(dst='127.0.0.1')/TCP(dport=9999)
>>> packet1.payload = 'abcdef'
>>> send(packet1)
.
Sent 1 packets.
>>> packet1.show()
###[ IP ]###
  version= 4
  ihl= None
  tos= 0x0
  len= None
  id= 1
  flags= 
  frag= 0
  ttl= 64
  proto= ip
  chksum= None
  src= 127.0.0.1
  dst= 127.0.0.1
  \options\
###[ Raw ]###
     load= 'abcdef'
>>> 
10
ответ дан 18 December 2019 в 14:42
поделиться
Другие вопросы по тегам:

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