Я новичок в scapy и пытаюсь создать собственный пакет IPP (Internet Printing Protocol), используя scapy
from scapy.packet import Packet
from scapy.fields import LEShortField, ShortField, IntField, XByteField, StrField
class IPP(Packet):
name = "IPP"
fields_desc = [
LEShortField("version", 1),
ShortField("Op-Id", 11),
IntField("request-id", 11),
XByteField("start", 1),
XByteField("char-code", 71),
ShortField("len", 18),
StrField("attr1", b'attributes-charset'),
ShortField("len-1", 5),
StrField("attr-value1", b'utf-8'),
XByteField("lang-code", 72),
ShortField("len-2", 27),
StrField("attr2", b'attributes-natural-language'),
ShortField("len-3", 5),
StrField("attr-value2", b'en-us'),
XByteField("uri-code", 69),
ShortField("len-4", 11),
StrField("attr3", b'printer-uri'),
ShortField("len-5", 34),
StrField("attr-value3", b'http://192.168.80.189:631/printer1'),
XByteField("end", 3),
]
def guess_payload_class(self, payload):
return payload
Я добавил следующий код в Python3.7 / dist-packages / scapy /layer / ipp.py
Следовательно, IPP (протокол Интернет-печати) реализован с использованием HTTP, я добавил слой HTTP перед настраиваемым IPP Layer
Для управления TCP-трехсторонним рукопожатием я использовал scapy StreamSocket
from scapy.layers.http import HTTP, HTTPRequest
from scapy.layers.ipp import IPP
from scapy.all import StreamSocket
import socket
ipp_request = HTTP()/HTTPRequest(
Method=b'POST',
Path=b'/printer1',
Connection=b'Keep-Alive',
Content_Type=b'application/ipp',
User_Agent=b'Internet Print Provider',
Content_Length=b'125',
Host=b'192.168.80.189:631'
)/IPP()
if __name__ == "__main__":
my_soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
my_soc.connect(("192.168.80.189", 631))
my_stream = StreamSocket(my_soc)
my_stream.basecls = IPP
reply, ans = my_stream.sr(ipp_request)
Я могу успешно отправить пакет IPP, но я не могу получить ответы. Я получаю ответ, например
Begin emission:
Finished sending 1 packets.
.......
Received 7 packets, got 0 answers, remaining 1 packets
, кажется, не работает, Любая помощь оченьоценили.