简体   繁体   中英

Wireshark thinks scapy packet's raw data is DNS (malformed packet)

I'm trying to send a udp packet with scapy to the all the devices in my network with raw data: ( hello everyone )

The packet looks like this:

packet = Ether(dst="ff:ff:ff:ff:ff:ff") / IP(dst="255.255.255.0") / UDP(sport=8118) / "hello everyone"
packet.show()

###[ Ethernet ]###
  dst       = ff:ff:ff:ff:ff:ff
  src       = (my mac address)
  type      = IPv4
###[ IP ]###
     version   = 4
     ihl       = None
     tos       = 0x0
     len       = None
     id        = 1
     flags     =
     frag      = 0
     ttl       = 64
     proto     = udp
     chksum    = None
     src       = 192.168.0.105
     dst       = 255.255.255.0
     \options   \
###[ UDP ]###
        sport     = 8118
        dport     = domain
        len       = None
        chksum    = None
###[ Raw ]###
           load      = 'hello everyone'

When I send the packet ( sendp(packet) ), wireshark says this is a malformed DNS packet: 在此处输入图像描述 在此处输入图像描述 在此处输入图像描述

What is the problem?

I believe you're confusing Wireshark, due to you not specifying the destination port. If you don't specify a dport for UDP , it defaults to 53:

class UDP(Packet):
    name = "UDP"
    fields_desc = [ShortEnumField("sport", 53, UDP_SERVICES),
                   ShortEnumField("dport", 53, UDP_SERVICES),
                   ShortField("len", None),
                   XShortField("chksum", None), ]

Both ports actually do. 53 is for DNS though, so Wireshark is attempting to interpret your payload as DNS based on the port number.

Specify both sport and dport to ensure that your packet isn't misinterpreted as a DNS packet.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM