当前位置:   article > 正文

Python dpkt抓包 IP片段组包_dpkt 捕获长度

dpkt 捕获长度

使用pcap或者winpcapy抓包后,对包做处理,使用dpkt工具,数据处理速度较快,但是dpkt大多数都是数据片段,一次交互请求,通常被分为很多片段,通过报文头部的

DO_NOT_FRAGMENT(是否分包) MORE_FRAGMENT(有更多片段)俩个字段,也就是(DF,MF)来确定是否有分包,是否是最后一个。

因为理论不足,以及没找到现成的代码,所以写了个组包代码

  1. ip = eth.data
  2. # 取出分片信息
  3. df = bool(ip.off & dpkt.ip.IP_DF)
  4. mf = bool(ip.off & dpkt.ip.IP_MF)
  5. offset = ip.off & dpkt.ip.IP_OFFMASK
  6. # 输出数据包信息:time,src,dst,protocol,length,ttl,df,mf,offset,checksum
  7. output1 = {'time':time.strftime('%Y-%m-%d %H:%M:%S',(time.localtime()))}
  8. output2 = {'src':'%d.%d.%d.%d'%tuple(ip.src) , 'dst':'%d.%d.%d.%d'%tuple(ip.dst)}
  9. output3 = {'protocol':ip.p, 'len':ip.len, 'ttl':ip.ttl}
  10. output4 = {'df':df, 'mf':mf, 'offset':offset, 'checksum':ip.sum}
  11. if output2['src'].strip() == '202.99.232.54':
  12. print('IP: %s -> %s (len=%d ttl=%d DF=%d MF=%d offset=%d)' % ('%d.%d.%d.%d'%tuple(ip.src), '%d.%d.%d.%d'%tuple(ip.dst), ip.len, ip.ttl, df, mf, offset))
  13. #print(ip.data.data)
  14. global b
  15. if df == 1 and ip.len == 1490:
  16. b = b + ip.data.data
  17. #print(str(b, encoding='utf-8'))
  18. elif ip.len > 40:
  19. b = b+ip.data.data
  20. print("\n===========")
  21. if b.find(b'application/json') > 0:
  22. try:
  23. start_index = b.find(b'\r\n\r\n')
  24. end_index = b[start_index+4:].find(b'\r\n')
  25. x = b[start_index+ 4 + end_index + 2:]
  26. x = x[:x.find(b'\r\n')]
  27. print(json.loads(str(x, encoding='utf-8')))
  28. except BaseException:
  29. print("parse to json error:" )
  30. print("*************")
  31. print(x)
  32. print("*************")
  33. print("============\n")
  34. b = bytes('', encoding='utf-8')
  35. else:
  36. b = ip.data.data
  37. print(str(b, encoding="utf-8"))

仅作参考,比如最大片段长度 1490,以及 长度为40,53的交互分别是什么信息都不是很确定。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/200828
推荐阅读
相关标签
  

闽ICP备14008679号