python udp报文解析,python 处理传输层的报文 TCP/UDP

from scapy.all import *alarm_map= {"211": "未系安全带", "205": "疲劳驾驶", "206": "疲劳驾驶", "208": "抽烟", "209": "出现异常"}defscan(target, port):

has_no_connect=TruewhileTrue:#根据接口进行监听报文

#接口获取由 IFACES 决定

try:#sniff开始获取报文,iface是接口,filter可以选择过滤报文类型, count为一次性获取多少个pkt

pkt = sniff(iface=IFACES.dev_from_index(12), filter="udp", count=1)#每个pkt格式类型于YAML,如果没有IP信息则代表这个包不完整

if pkt[0][IP].src == "192.168.43.1":ifhas_no_connect:#展示建立连接的第一个UDP包

pkt[0].show()if Raw inpkt[0]:

has_no_connect=False#load的值为bytes类型

body =pkt[0][Raw].loadif b'alarm":2' inbody:

result=json.loads(body.decode())if str(result.get('dms').get('alarm')) inalarm_map.keys():

now_time= datetime.datetime.now().strftime('%Y%m%d%H%M%S')

message={"event_name": alarm_map[str(result.get('dms').get('alarm'))],"event_time": now_time,

}print(message)else:print(result)exceptException as e:print(pkt[0])continue

"""调用show()可以展示数据包,抓到第一个数据包格式如下:

###[ Ethernet ]###

dst = 20:0d:b0:17:cf:d4

src = 02:08:22:b2:bb:fb

type = IPv4

###[ IP ]###

version = 4

ihl = 5

tos = 0x0

len = 208

id = 19582

flags = DF

frag = 0

ttl = 64

proto = udp

chksum = 0x163a

src = 192.168.43.1

dst = 192.168.43.19

\options \

###[ UDP ]###

sport = 23456

dport = 62472

len = 188

chksum = 0x202f

###[ Raw ]###

load = '{"code":3,"dms":{"alarm":0,"num":1,"id":0,"eye":0,"p":15.220612,"y":-29.808479,"r":6.351517,"fr":0.493671,"fmi":0,"fmon":0,"fx":0.389583,"fy":0.201852,"fw":0.192708,"fh":0.457407}}'"""

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值