403Webshell
Server IP : 45.94.215.241  /  Your IP : 216.73.216.243
Web Server : Apache/2.4.66 (Ubuntu)
System : Linux srv2937474766 7.0.0-28-generic #28-Ubuntu SMP PREEMPT_DYNAMIC Sun Jun 21 01:01:36 UTC 2026 x86_64
User : www-data ( 33)
PHP Version : 8.5.4
Disable Function : NONE
MySQL : OFF  |  cURL : ON  |  WGET : ON  |  Perl : ON  |  Python : OFF  |  Sudo : ON  |  Pkexec : OFF
Directory :  /sbin/

Upload File :
current_dir [ Writeable ] document_root [ Writeable ]

 

Command :


[ Back ]     

Current File : /sbin/mptcpify-bpfcc
#! /usr/bin/python3
#
# mptcpify Make the applications to use MPTCP.
#           For Linux, uses BCC, eBPF. Embedded C.
#
# USAGE: ./mptcpify
#        ./mptcpify -t curl,iperf3
#
# Copyright 2025 Kylin Software, Inc.
# Licensed under the Apache License, Version 2.0 (the "License")
#
# 05-Apr-2025   Gang Yan   Created this.

import ctypes as ct
import argparse
import signal
import time

from bcc import BPF

#arguments
parser = argparse.ArgumentParser(
         description="mptcpify try to force applications to use MPTCP instead of TCP")
parser.add_argument("-t", "--targets", type=str,
                    help="use ',' for multi targets, eg: 'iperf3,rsync'. "
                         "Without '-t', it can works on all applications by default.")

args_str = parser.parse_args()
if args_str.targets != None:
    mode = 1
    args_list = [t.strip() for t in args_str.targets.split(',')]
else:
    mode = 0

if (not BPF.support_fmod_ret()):
    print("Your kernel version is too old,"
          " fmod_ret method is only support kernel v5.7 and later.")
    exit()

TASK_COMM_LEN = 16

class app_name(ct.Structure):
    _fields_ = [("str", ct.c_char * TASK_COMM_LEN)]

# define BPF program
prog = """
#include <linux/net.h>
#include <uapi/linux/in.h>
#include <linux/string.h>

struct app_name {
    char name[TASK_COMM_LEN];
};

BPF_ARRAY(work_mode, int, 1);
BPF_HASH(support_apps, struct app_name);

KMOD_RET(update_socket_protocol, int family, int type, int protocol, int ret)
{
    struct app_name target = {};
    int index = 0;
    int *mode = work_mode.lookup(&index);
    bpf_get_current_comm(&target.name, TASK_COMM_LEN);

    if ((family == AF_INET || family == AF_INET6) &&
        type == SOCK_STREAM &&
        (!protocol || protocol == IPPROTO_TCP) &&
        (*mode == 0 || support_apps.lookup(&target)))
        return IPPROTO_MPTCP;

    return protocol;

}

"""

b = BPF(text=prog)
b.attach_fmod_ret("update_socket_protocol")

work_mode = b["work_mode"]
support_apps = b.get_table("support_apps")
if mode:
    for i in args_list:
        app = i.encode()
        name = app_name()
        name.str = app[:TASK_COMM_LEN-1].ljust(TASK_COMM_LEN, b'\0')
        support_apps[name] = ct.c_uint32(1)

work_mode[ct.c_int(0)] = ct.c_int(mode)

print("MPTCP is been forced for ", args_list if mode == 1 else "all applications");
signal.pause()

Youez - 2016 - github.com/yon3zu
LinuXploit