Python解码UDP

Python decoding UDP

代码:

import socket, binascii, struct

s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_UDP)
while True:
    print s.recv(2048)

输出:

Ek�9@@�F5��W�jq��� stackexchangecom� electronics �
h h

stackexchangecomDa�scifi ET@@�<���� Whosebugcom���meta ,��� Whosebugcom�A���meta ,��� stackexchangecomG��security Ee@@�+���� stackexchangecom���scifi

如您所见,部分数据已 decoded/interpreted 但其余数据不确定原因

有人可以帮忙吗?

您正在打印包含任意二进制数据的原始 UDP 数据包。其中一些字节在 printable 范围内,但不在该范围内的字节会转换为 �。

您可以通过打印其 representation 来更好地查看该数据,它正常显示可打印字节,而将不可打印字节显示为十六进制转义码。为此,请将您的 print 语句更改为:

    print repr(s.recv(2048))

我怀疑您想真正解码这些数据包。这很有可能,但有点技术性,您可能应该先稍微研究一下这个主题。 :) Silver Moon 的这篇文章,Code a network packet sniffer in python for Linux,看起来很有帮助。