当SCTP是带有Scapy/Python的传输协议时,获取全直径数据包

2024-09-28 21:36:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个跟踪,一个使用TCP和diameter协议,另一个使用SCTP和diameter协议。 我想使用以下代码使用scapy和Python检索所有数据包diameter SCTP:

bind_layers(SCTP, DiamG, dport=port_de_test)
bind_layers(SCTP, DiamG, sport=port_de_test)
bind_layers(TCP, DiamG, dport=port_de_test)
bind_layers(TCP, DiamG, sport=port_de_test)
class CallFlow:
    def __init__(self, pcap_adress=""):
        portsGx = {4458,3870,3868, 4468, 49857, 48868,59368}
        portsGy = {4457, 4467, 49871, 48871}
        self.messages = []
        try:
            if pcap_adress != '':
                
                packets = rdpcap(pcap_adress)
                for packet in packets:
                    
                    if DiamG in packet:
                        
                        if TCP in packet:
                            p = packet[TCP]
                            
                            d = p.payload
                            
                            
                            if (packet[TCP].sport in portsGx) | (packet[TCP].dport in portsGx):
                                interface = "Gx"
                            elif (packet[TCP].sport in portsGy) | (packet[TCP].dport in portsGy):
                                interface = "Gy"
                        elif SCTP in packet:
                            p = packet[SCTP]
                            
                            d = p.payload
                            print (d)
                            if (packet[SCTP].sport in portsGx) | (packet[SCTP].dport in portsGx):
                                interface = "Gx"
                            elif (packet[SCTP].sport in portsGy) | (packet[SCTP].dport in portsGy):
                                interface = "Gy"
                        else:
                            print("Diameter should be TCP or SCTP")
                            `break

当我运行这段代码时,当TCP是传输协议时,我可以得到所有diameter数据包,但当我运行这段代码时,当sctp是传输协议时,我只得到第一条消息,而不是所有的跟踪

你能检查一下这个密码并告诉我出了什么问题吗

谢谢


Tags: in协议ifpacketbindportlayerstcp