当前位置: 首页 > news >正文

Linux网络TCP sticky分析工具

1 TCP粘包 - TCP_NODELAY
TCP粘包(sticky)的表现是TCP nagle算法将应用层发送的多个包进行合并后,再发送,很容易出现burst导致bcm89230丢包。由于OABR不支持流控,所以需要使用Linux tc对对应的TCP port进行流量整形。

2 check sticky
import operator
import shutil
import struct
import sys,os
import time

# https://wiki.wireshark.org/Development/LibpcapFileFormat

def read_pkt_from_binary_file(f, pkt_len, list_data):
    for i in range(0, pkt_len):
        b = f.read(1)
        list_data.append('0x%.2x' % ord(b))

def my_cmp(list1, list2):
    if sys.version_info[0] >= 3:  # Python 3
        return operator.eq(list1, list2)
    else:  # Python 2
        if (0 == cmp(list1, list2)):
            return True
        else:
            return False

def _search_hex(list_to_be_found, last_list,
    cur_list, pkt_cnt, hdr):
    list_len = len(list_to_be_found)
    last_list_len = len(last_list)

    ts_sec, ts_usec, incl_len, orig_len = \
        struct.unpack('IIII', hdr)

    ### transfer to UTC from timestamp
    utc = time.asctime(time.localtime(int(ts_sec)))
    index = utc.rfind(' ')
    utc = utc[0:index] # skip the year YYYY

    for i in range(0, incl_len - list_len + 1):
        if (True == my_cmp(list_to_be_found,
            cur_list[i:(i + list_len)])):
            print(str(pkt_cnt) + ' ' + utc + '.' +
                str(ts_usec) + ' ' +
                str(incl_len) + ' ' +
                str(orig_len) + ' offset = '
                + str(hex(i)))

    new_list = last_list + cur_list
    for i in range(0, len(new_list) - list_len + 1):
        if ((True == my_cmp(list_to_be_found,
            new_list[i:(i + list_len)])) and \
            (i < last_list_len) and \
            ((i + list_len) > last_list_len)):  # across border

            print(str(pkt_cnt) + ' ' +
                utc + '.' + str(ts_usec) + ' '  +
                str(incl_len) + ' ' +
                str(orig_len) + ' offset = ' +
                str(hex(i)) +
                '---TCP sticky with last line')

def search_hex(file_name, list_to_be_found):
    last_list = []
    pkt_cnt = 1;
    ### skip the global header
    offset = 24

    f = open(file_name, 'rb')
    while f:
        f.seek(offset, os.SEEK_SET)
        ### packet header
        hdr = f.read(16)
        if len(hdr) == 0:
            f.close()
            break
        offset += 16
        ts_sec, ts_usec, incl_len, orig_len = \
            struct.unpack('IIII', hdr)

        ### packet data
        f.seek(offset, os.SEEK_SET)
        cur_list = []
        read_pkt_from_binary_file(f, incl_len, cur_list)
        _search_hex(list_to_be_found,
            last_list, cur_list, pkt_cnt, hdr)

        # save current packet as last for next comparing
        last_list = cur_list
        pkt_cnt += 1
        offset += incl_len

def main():
    arg0_proc_name = sys.argv[0]
    if sys.argv[0].rfind(os.path.sep) > 0 :
        index = sys.argv[0].rfind(os.path.sep)
        arg0_proc_name = sys.argv[0][index+1:]

    if len(sys.argv) < 3:
        print('\nUsage: python ' + arg0_proc_name +
            ' <file_name> <hex...>\n')
        print('python ' + arg0_proc_name + \
            ' <file_name.pcap> ' +
            '0x01 0x01 0x90 0x02\n')
        sys.exit(0)

    list_to_be_found = []
    for i in range(2, len(sys.argv)):
        list_to_be_found.append(sys.argv[i])
    search_hex(sys.argv[1], list_to_be_found)

if __name__ == '__main__':
    main()

# ServiceID: 0x0101
# MethodID: 0x9002

相关文章:

Linux网络TCP sticky分析工具

1 TCP粘包 - TCP_NODELAY TCP粘包&#xff08;sticky&#xff09;的表现是TCP nagle算法将应用层发送的多个包进行合并后&#xff0c;再发送&#xff0c;很容易出现burst导致bcm89230丢包。由于OABR不支持流控&#xff0c;所以需要使用Linux tc对对应的TCP port进行流量整形。 …...

华为OD机试题,用 Java 解【DNA 序列】问题

最近更新的博客 华为OD机试 - 猴子爬山 | 机试题算法思路 【2023】华为OD机试 - 分糖果(Java) | 机试题算法思路 【2023】华为OD机试 - 非严格递增连续数字序列 | 机试题算法思路 【2023】华为OD机试 - 消消乐游戏(Java) | 机试题算法思路 【2023】华为OD机试 - 组成最大数…...

python的所有知识点+代码+注释,不看就亏死了

目录 简介 特点 搭建开发环境 版本 hello world 注释 文件类型 变量 常量 数据类型 运算符和表达式 控制语句 数组相关 函数相关 字符串相关 文件处理 对象和类&#xff0c;注&#xff1a;不是那个对象&#xff01;&#xff01;&#xff01;&#xff01;&…...

读懂分布式事务

一、概述 1.1 什么是分布式事务 事务我们都很熟悉&#xff0c;事务提供一种机制将一个活动涉及的所有操作纳入到一个不可分割的执行单元&#xff0c;组成这组操作的各个单元&#xff0c;要么全部成功&#xff0c;要么全部失败。 事务有四大特性&#xff1a; Atomic&#xf…...

多目标粒子群算法求解帕累托前沿Pareto,Pareto的原理,测试函数100种求解之21

目录 背影 parte前沿的定义 注意事项 基于多目标粒子群的帕累托前沿求解 主要参数 MATLAB代码 效果图 结果分析 展望 背影 在目标优化过程种,很多时候都两个或者多个目标,并且目标函数不能同时达到最优,鱼与熊掌不可兼得,这个时候可以通过求解帕累托前沿,通过帕累托前沿…...

数组:二分查找、移除数组等经典数组题

二分查找&#xff1a;相关题目链接&#xff1a;https://leetcode.cn/problems/binary-search/题目重现&#xff1a;给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xff0c;写一个函数搜索 nums 中的 target&#xff0c;如果目标值…...

负责任动物纤维标准RAF

【负责任动物纤维标准RAF】RAF-Responsible Animal Fiber, 中文翻译为负责任动物纤维标准。RAF标准包含了三个子标准&#xff0c;即RWS&#xff08;责任羊毛标准&#xff09;、RMS&#xff08;责任马海毛标准&#xff09;和RAS&#xff08;责任羊驼毛标准&#xff09;。RWS&…...

storybook使用info插件报错

报错内容: RangeErrorMaximum call stack size exceededCall StackprettyPrintvendors-node_modules_pmmmwh_react-refresh-webpack-plugin_lib_runtime_RefreshUtils_js-node_mod-4ff2dd.iframe.bundle.js:160:27undefinedvendors-node_modules_pmmmwh_react-refresh-webpack-…...

【每日一题Day129】LC1247交换字符使得字符串相同 | 贪心

交换字符使得字符串相同【LC1247】 有两个长度相同的字符串 s1 和 s2&#xff0c;且它们其中 只含有 字符 "x" 和 "y"&#xff0c;你需要通过「交换字符」的方式使这两个字符串相同。 每次「交换字符」的时候&#xff0c;你都可以在两个字符串中各选一个字…...

性能优化之node中间件耗时

背景 中间件在node框架中是很基本的套件&#xff0c;使用不当很容易对页面性能造成影响。除了node服务端外&#xff0c;前端做的SSR项目也要特别重视这块 哪些场景会造成中间件耗时特别严重&#xff1f; 罪魁祸首是&#xff1a;await阻塞 举个例子&#xff1a; 1.如何得到 …...

3-1 图文并茂说明raid0,raid1, raid10, raid01, raid5等原理

文章目录简介RAID类型RAID0RAID1RAID5RAID6RAID10RAID01RAID对比图简介 一、RAID 是什么&#xff1f; RAID &#xff08; Redundant Array of Independent Disks &#xff09;即独立磁盘冗余阵列&#xff0c;简称为「磁盘阵列」&#xff0c;其实就是用多个独立的磁盘组成在一起…...

西北工业大学大学物理(I)下2019-2020选填考题解析

单选题12个&#xff0c;24分。1量子数考查前三个量子数由薛定谔方程决定&#xff0c;最后一个关于自旋的由狄拉克方程决定由这些量子数可以给出原子的壳层结构。考试其实考的不深&#xff0c;记住这个表就够了。2 书上18、19章量子物理的著名实验&#xff1a;光电效应&#xff…...

自动化测试selenium

目录 一、为什么引入自动化测试&#xff1f; 二、为什么选择selenium作为自动化测试工具&#xff1f; 三、环境部署 四、什么是驱动&#xff1f;驱动的工作原理&#xff1f; 五、selenium的基础语法 元素定位 元素操作 点击元素 模拟键盘输入 清除对象输入的文本…...

熟悉GC常用算法,熟悉常见垃圾收集器,具有实际JVM调优实战经验

程序的栈和堆 栈先进后出&#xff0c;且里面的数据自动释放&#xff0c; 堆内的空间则需要手动释放 java python go 只管创建&#xff0c;不用像c,c需要手动释放空间&#xff0c; 因为他们都会开一个进程GC&#xff08;Garbage Collector&#xff09;&#xff0c;由垃圾回收…...

常量和变量——“Python”

各位CSDN的uu们你们好呀&#xff0c;今天&#xff0c;小雅兰的内容是Python的一些基础语法噢&#xff0c;会讲解一些常量和变量的知识点&#xff0c;那么&#xff0c;现在就让我们进入Python的世界吧 常量和表达式 变量和类型 变量是什么 变量的语法 变量的类型 常量和表达式 …...

《蓝桥杯每日一题》KMP算法·AcWing 141. 周期

1.题目描述一个字符串的前缀是从第一个字符开始的连续若干个字符&#xff0c;例如 abaab 共有 55 个前缀&#xff0c;分别是 a&#xff0c;ab&#xff0c;aba&#xff0c;abaa&#xff0c;abaab。我们希望知道一个 N 位字符串 S 的前缀是否具有循环节。换言之&#xff0c;对于每…...

URL介绍

前言Internet上的每一个网页都具有一个唯一的名称标识&#xff0c;通常称之为URL&#xff08;Uniform Resource Locator, 统一资源定位器&#xff09;。它是www的统一资源定位标志&#xff0c;简单地说URL就是web地址&#xff0c;俗称“网址”。一、URL概念URL是对互联网上得到…...

学习 Python 之 Pygame 开发魂斗罗(一)

学习 Python 之 Pygame 开发魂斗罗&#xff08;一&#xff09;Pygame回忆Pygame1. 使用pygame创建窗口2. 设置窗口背景颜色3. 获取窗口中的事件4. 在窗口中展示图片(1). pygame中的直角坐标系(2). 展示图片(3). 给部分区域设置颜色5. 在窗口中显示文字6. 播放音乐7. 图片翻转与…...

ARM uboot 源码分析8 - uboot的环境变量

一、uboot 的环境变量基础 1、环境变量的作用 (1) 让我们可以不用修改 uboot 的源代码&#xff0c;而是通过修改环境变量&#xff0c;来影响 uboot 运行时的一些数据和特性。譬如说&#xff0c;通过修改 bootdelay 环境变量&#xff0c;就可以更改系统开机自动启动时倒数的秒…...

【蓝牙mesh】Network协议层介绍

【蓝牙mesh】Network协议层介绍 Network层简介 上一章节我们讲解了蓝牙Mesh中Lower层的功能和数据格式。 Lower层的数据往下传输就到了网络层&#xff08;Network Layer&#xff09;。网络层定义了收到Lower层的数据后&#xff0c;如何对其进行判断、封装、加密、认证&#xf…...

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

AI Agent与Agentic AI:原理、应用、挑战与未来展望

文章目录 一、引言二、AI Agent与Agentic AI的兴起2.1 技术契机与生态成熟2.2 Agent的定义与特征2.3 Agent的发展历程 三、AI Agent的核心技术栈解密3.1 感知模块代码示例&#xff1a;使用Python和OpenCV进行图像识别 3.2 认知与决策模块代码示例&#xff1a;使用OpenAI GPT-3进…...

条件运算符

C中的三目运算符&#xff08;也称条件运算符&#xff0c;英文&#xff1a;ternary operator&#xff09;是一种简洁的条件选择语句&#xff0c;语法如下&#xff1a; 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true&#xff0c;则整个表达式的结果为“表达式1”…...

dedecms 织梦自定义表单留言增加ajax验证码功能

增加ajax功能模块&#xff0c;用户不点击提交按钮&#xff0c;只要输入框失去焦点&#xff0c;就会提前提示验证码是否正确。 一&#xff0c;模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...

MVC 数据库

MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具&#xff0c;可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件&#xff0c;也不需要在线上传文件&#xff0c;保护您的隐私。 工具截图 主要特点 &#x1f680; 快速转换&#xff1a;本地转换&#xff0c;无需等待上…...

AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别

【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而&#xff0c;传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案&#xff0c;能够实现大范围覆盖并远程采集数据。尽管具备这些优势&#xf…...

Proxmox Mail Gateway安装指南:从零开始配置高效邮件过滤系统

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐&#xff1a;「storms…...