Я пытаюсь изучить контроллер SDN Ryu для личного проекта, и мне нужно знать определенную информацию о пакете, чтобы решить, что с ним делать.
Я уже импортировал:
from ryu.lib.packet import ethernet
from ryu.lib.packet import packet
from ryu.lib.packet import arp
from ryu.lib.packet import ipv4
from ryu.lib.packet import tcp
from ryu.lib.packet import tcp
И с вышеупомянутыми модулями я сделал последовательность отпечатков, чтобы проверить спецификации полного пакета:
msg = ev.msg
datapath = msg.datapath
ofproto = datapath.ofproto
parser = datapath.ofproto_parser
in_port = msg.match['in_port']
pkt = packet.Packet(msg.data)
eth = pkt.get_protocols(ethernet.ethernet)[0]
arp_pkt = pkt.get_protocol(arp.arp)
ipv4_pkt = pkt.get_protocol(ipv4.ipv4)
tcp_pkt = pkt.get_protocol(tcp.tcp)
udp_pkt = pkt.get_protocol(udp.udp)
print("\nEth pkt: {0}".format(eth))
print("\nIPV4 pkt: {0}".format(ipv4_pkt))
print("\nARP pkt: {0}".format(arp_pkt))
print("\nTCP pkt: {0}".format(tcp_pkt))
print("\nUDP pkt: {0}".format(udp_pkt))
, и когда я пытаюсь установить соединение TCP, я получаю следующие отпечатки:
Eth pkt: ethernet(dst='00:00:00:00:00:02',ethertype=2048,src='00:00:00:00:00:01')
IPV4 pkt: ipv4(csum=32564,dst='10.0.0.2',flags=2,header_length=5,identification=42869,offset=0,option=None,proto=6,src='10.0.0.1',tos=16,total_length=60,ttl=64,version=4)
ARP pkt: None
TCP pkt: tcp(ack=0,bits=2,csum=6900,dst_port=5001,offset=10,option='\x02\x04\x05\xb4\x04\x02\x08\n\x00\x10\xf05\x00\x00\x00\x00\x01\x03\x03\t',seq=1729779520,src_port=58573,urgent=0,window_size=29200)
UDP pkt: None
packet in 1 00:00:00:00:00:01 00:00:00:00:00:02 1
мой вопрос: как мне, например, получить порт назначения из insde tcp_pkt:
tcp_pkt = tcp(ack=0,bits=2,csum=6900,dst_port=5001,offset=10,option='\x02\x04\x05\xb4\x04\x02\x08\n\x00\x10\xf05\x00\x00\x00\x00\x01\x03\x03\t',seq=1729779520,src_port=58573,urgent=0,window_size=29200)
есть что-то вроде tcp_pkt.dst ()?Или есть другой способ уловить это значение?