基础知识十二、Python解析网络报文之UDP首部报文解析

       上一节解析了TCP报文首部后,本节继续解析同样位于传输层的UDP报文首部。UDP作为一种无连接,不可靠的协议,其存在数据丢失不可知和没有拥塞控制等缺点,但有失亦有得,UDP的效率相对于TCP较高,多应用于对准确性要求相对低的场景,比如网络直播,网络视频语音通话等。

一、UDP首部解析器的实现

       UDP首部位于IP首部之后,每行同为32位,总共2行,长度为8字节,也就是位于IP数据报第21-28字节的位置。
       在UDPParser中分别对头部报文的每一行进行解析。

class UDPParser(TransParser):

    @classmethod
    def parse_udp_header(cls, udp_header):
        """
        UDP报文格式
        1. 16位源端口 16位目的端口
        2. 16位UDP长度 16位UDP报文校验和
        :param udp_header:
        :return:
        """
        udp_header = struct.unpack('>HHHH', udp_header)

        # 返回结果
        # src_port 源端口
        # dst_port 目的端口
        # udp_length UDP报文长度
        # udp_checksum UDP报文校验和
        return {
            'src_port': udp_header[0],
            'dst_port': udp_header[1],
            'udp_length': udp_header[2],
            'udp_checksum': udp_header[3]
        }

    @classmethod
    def parser(cls, packet):

        return cls.parse_udp_header(packet[cls.IP_HEADER_LENGTH:cls.IP_HEADER_LENGTH + cls.UDP_HEADER_LENGTH])

二、测试逻辑

       当IP首部中的protocol等于17时表示该报文属于UDP协议,在ServerProcessTask中调用UDPParser。

def process(self):
    """
    异步处理方法
    :return:
    """
    headers = {
        'network_header': None,
        'transport_header': None
    }

    ip_header = IPParser.parse(self.packet)
    headers['network_header'] = ip_header
    if ip_header['protocol'] == 6:  # TCP协议
        headers['transport_header'] = TCPParser.parser(self.packet)
    elif ip_header['protocol'] == 17:  # UDP协议
        headers['transport_header'] = UDPParser.parser(self.packet)

    return headers

       测试结果:
在这里插入图片描述

三、结语

       至此本系列的基础知识实践分享就告一段落了,想学习更多知识的小伙伴可以去慕课网编程必备基础 计算机组成原理+操作系统+计算机网络 看更详细的讲解,希望能帮到大家,谢谢!

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值