Стресс-тест онлайн-трафика Tcpcopy
Стресс-тест онлайн-трафика Tcpcopy

TCPCopy используется для воспроизведения TCP. Распространенным сценарием является копирование онлайн-трафика в тестовую среду для устранения проблем, которые нелегко воспроизвести в автономном режиме, или для выполнения нагрузочного тестирования в тестовой среде. (HTTPS не может быть подвергнут стресс-тестированию из-за шифрования данных)

1. Требования: Внедрить онлайн-трафик в тестовую среду.

Изначально планировалось напрямую перенаправлять трафик nginx, а потому на сайте используется https-шифрование. Дренаж не увенчался успехом. Трафик может быть направлен только на HTTP одного приложения.

  • 1. Отношения приложений
Язык кода:javascript
копировать
приложение           Исходный сервер                            в настоящий момент Тестовый сервисустройствоdemo-app      10.1.3.74:7001                     192.168.54.62:82
  • 2. Таблица отношений хостов
Язык кода:javascript
копировать
онлайн-сервер   10.1.3.74:7001
Тестовый сервисустройство   192.168.54.62:82
перехват (вторичный сервер)  10.1.2.40
online--->транзитная службаустройство1 10.1.2.41  ---》Транзитный сервер 2 192.168.77.84 -->Тестовый сервисустройство

2. Подключаем сеть с помощью rinetd или haproxy.

нуждаться:online--->транзитная службаустройство1 10.1.2.41 ---》Транзитный сервер 2 192.168.77.84 -->Тестовый сервисустройство.

Поскольку онлайн-среда несовместима с тестовой средой, для достижения тестового сервера необходимо пройти сетевую переадресацию уровня 2. Здесь для сетевой пересылки используется rinetd.

  • 1. Транзитный сервер 1: Установите rinetd на 10.1.2.41.
Язык кода:javascript
копировать
[root@vm-phx-k8s-master-0241 ~]# cat /etc/rinetd.conf 
10.1.2.41   7001    192.168.77.84   7001
10.1.2.41   7002    192.168.77.84   7002
10.1.2.41   7003    192.168.77.84   7003
10.1.2.41   7004    192.168.77.84   7004
10.1.2.41   7005    192.168.77.84   7005
10.1.2.41   7006    192.168.77.84   7006
10.1.2.41   7007    192.168.77.84   7007
  • Команда запуска: /root/rinetd/rinetd -c /etc/rinetd.conf
  • 2. Транзитный сервер 2: 192.168.77.84 Устанавливаем rinetd
Язык кода:javascript
копировать
[root@vm-l2f-umicen-app-7784 ~]# cat /etc/rinetd.conf 
192.168.77.84   7001    192.168.54.62   82
192.168.77.84   7002    192.168.47.136  8080
192.168.77.84   7003    192.168.42.169  8080
192.168.77.84   7004    192.168.47.202  8080
192.168.77.84   7005    192.168.47.37   8080
192.168.77.84   7006    192.168.42.148  8080
192.168.77.84   7007    192.168.43.41   8080
  • Команда запуска: /root/rinetd/rinetd -c /etc/rinetd.conf

*3 сценарий перезапуска rinetd

Язык кода:javascript
копировать
#!/bin/bash 
source /etc/profile
kill -9 $(ps -ef |grep "/root/rinetd/rinetd"  |grep -v "grep"  |grep -v bash|awk '{print $2}')
ps aux |grep "/root/rinetd/rinetd"
sleep 1
/root/rinetd/rinetd -c /etc/rinetd.conf

  • 3. Используйте haproxy для переадресации TCP-портов, что более эффективно и стабильно (вот сценарий быстрой установки. Конфигурацию передачи необходимо изменить самостоятельно (здесь мы используем rinetd, это просто, но сеть была перенаправлена). уже давно нестабильно)
Язык кода:javascript
копировать
#!/bin/bash
source /etc/profile
yum -y install haproxy
cd /etc/haproxy
cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.backup
cat >> /etc/haproxy/harpoxy.cfg << EOF
global
        ulimit-n  51200
        log /dev/log    local0
        log /dev/log    local1 notice
        chroot /var/lib/haproxy
        pidfile /var/run/haproxy.pid
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    tcp
        option  dontlognull
        timeout connect 600
        timeout client 5m
        timeout server 5m
frontend tcp-7001
        bind *:7001
        default_backend tcp-port-7001
backend tcp-port-7001
        server server1 192.168.77.84:7001 maxconn 20480


listen admin_stat                  
bind 0.0.0.0:1080        
mode http     
stats refresh 30s              
stats uri /haproxy_stats_url    
stats realm Haproxy \Statistics 
stats auth admin:123456
stats hide-version              
stats admin if TRUE    

EOF

systemctl enable haproxy.service
systemctl start haproxy.service

3. Развертывание вспомогательного сервера: 10.1.2.40.

  • 1. Установка
Язык кода:javascript
копировать
wget https://github.com/session-replay-tools/intercept/archive/1.0.0.tar.gz
tar -xvf 1.0.0.tar.gz 
cd intercept-1.0.0/
./configure 
yum install libpcap* -y
make && make install
  • 2. Исполнение
  • Пример команды:
Язык кода:javascript
копировать
/usr/local/intercept/sbin/intercept -i ens33 -l /var/log/intercept.log -F tcp and src port 7001 -d
Язык кода:javascript
копировать
-i, intercept будет прослушивать порт и связываться с tcpcopy -i указывает, какой порт прослушивать. Когда tcpcopy запустится, он подключится к этому порту. Если он не сможет подключиться, он не запустится. (erh0 — имя сетевой карты)
-F, Правила и синтаксис фильтрации такие же, как и у pcap.
-d, Запуск в режиме демона
  • Сценарий: (Поскольку в моей среде есть много портов-источников фильтрации, я напрямую отслеживаю и фильтрую все протоколы TCP, не указывая порт)
Язык кода:javascript
копировать
[root@vm-phx-k8s-master-0240 scripts]# cat /root/scripts/intercept.sh 
#!/bin/bash
souce /etc/profile
/usr/local/intercept/sbin/intercept -i ens33 -l /var/log/intercept.log -F tcp -d
  • 3. Отключите функцию переадресации и действуйте как функция черной дыры.
Язык кода:javascript
копировать
Измените /etc/sysctl.conf.
net.ipv4.ip_forward=0

выполнить sysctl -p 

4. Развертывание онлайн-сервера: 10.1.3.74.

  • 1. Установка
Язык кода:javascript
копировать
wget https://github.com/session-replay-tools/tcpcopy/archive/1.0.0.tar.gz
tar zxvf 1.0.0.tar.gz
cd tcpcopy-1.0.0
./configure  && make && make install
  • 2. Исполнение
  • Скрипт: tcpcopy.sh
Язык кода:javascript
копировать
[root@online ~]# cat /root/tcpcopy/tcpcopy.sh 
#!/bin/bash
source /etc/profile
/usr/local/tcpcopy/sbin/tcpcopy  -x 7001-10.1.2.41:7001   -s 10.1.2.40  -c  10.1.5.x   -l /var/log/tcpcopy.log -d

  • Команда случая:
Язык кода:javascript
копировать
Тестовая команда: /usr/local/tcpcopy/sbin/tcpcopy.  -x исходный порт — тестовая машина: тестовый порт -s перехватить адрес машины -c  Имитировать IP-сегмент   -l /var/log/tcpcopy.log
/usr/local/tcpcopy/sbin/tcpcopy  -x 7001-10.1.2.41:7001    -s 10.1.2.40 -c  10.1.5.x   -l /var/log/tcpcopy.log -d
Язык кода:javascript
копировать
-x, Это означает, что трафик локального порта 8000 копируется в порт 6001 192.168.2.30.
-s, Укажите адрес перехватывающей машины. Tcpcopy необходимо установить соединение с перехватом.
-c Замаскируйте адрес и перенаправьте трафик на Тестовый. При использовании сервера измените адрес источника пакета данных на 10.1.5.2, чтобы упростить указание маршрута. Его также можно записать как 10.1.5.x, чтобы адресом источника был адрес в указанном сегменте сети.
-n Коэффициент усиления потока не требуется для испытаний под давлением, указывать этот параметр нет необходимости.
-d Запустить в режиме демона

5. Протестируйте сервер и добавьте маршрутизацию (сейчас мы используем переадресацию портов, тестовый сервер — 10.1.2.41, реальный сервер: 192.168.54.62:82)

Выполнить команду маршрутизации для службы 10.1.2.41.

Язык кода:javascript
копировать
route add -net 10.1.5.0 netmask 255.255.255.0 gw 10.1.2.40

6. Убедитесь, что доступ к tcpcopy успешен (просматривая онлайн-журналы и сравнивая их с тестовыми журналами).

  • 1. Проверьте журналы доступа к онлайн-серверу.
Язык кода:javascript
копировать
[root@online en]# pwd
/home/app/log/
[root@online en]# tail -n 10 en.log 
2020-10-30 10:34:10,755 [http-0.0.0.0:7001-1$2125991095] WARN com.ActionServlet [01] /eHome.do?xcase=index,908,661768202,39.88.110.24,00,TguNTYuMTUwLjE0MjAyMDEwMjIxMDE1MTI3NzE4NTQ5NTAzOAN,TExNDAwMjM0NzA3NDg4MjQ6MzkuODguMTEwLjI0OjY2MTc2ODIwMjowMAM,jAyMDEwMzAxMDM0MDIzNDkwMDA6MTk0MTk3MDMwODE4MTUyNjU3NDQM
2020-10-30 10:34:10,996 [http-0.0.0.0:7001-16$580927107] WARN com.ActionServlet [01] /ajaxfunction.do?xcase=ajaxlogonconnection&t=1604025241961&_=1604025241962,23,616549844,103.116.47.92,7403105,TAzLjExNi40Ny45MjIwMjAxMDIzMTA0NzQwODI5OTkyMjU2NzgM,TExMzk1MzY1MzcxMzA3Nzc6MTAzLjExNi40Ny45Mjo2MTY1NDk4NDQ6NzQwMzEwNQM,jAyMDEwMzAxMDMzMjA1NTIwMDA6MDExNTkzOTQ3MDAzNjA3NzM0MDkM
2020-10-30 10:34:23,375 [http-0.0.0.0:7001-4$1345458085] WARN com.ActionServlet [01] /iar.do?catId=5&xcase=index,66,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,621 [http-0.0.0.0:7001-3$1863279517] WARN com.ActionServlet [01] /eHomeHotActivity.do?xcase=index,191,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,691 [http-0.0.0.0:7001-1$2125991095] WARN com.ActionServlet [01] /eHomeExcellentService.do?xcase=index,24,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,752 [http-0.0.0.0:7001-16$580927107] WARN com.ActionServlet [01] /eHomeOnlineCourse.do?xcase=index,17,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,815 [http-0.0.0.0:7001-13$1113166511] WARN com.ActionServlet [01] /eHomeOnlineCourse.do?demandTypeName=vod&pageNumber=1&xcase=list,19,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:38,866 [http-0.0.0.0:7001-15$38163862] WARN com.ActionServlet [01] /eHome.do?xcase=sucStoryDetail&pasId=heKnNEDdHxlA,4896,616274054,112.232.32.190,3991982,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
2020-10-30 10:34:40,557 [http-0.0.0.0:7001-14$82426960] WARN com.ActionServlet [01] /ajaxfunction.do?xcase=ajaxlogonconnection&time=1604025279782,22,616274054,112.232.32.190,3991982,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
2020-10-30 10:34:43,619 [http-0.0.0.0:7001-2$405165860] WARN com.ActionServlet [01] /ajaxfunction.do?xcase=ajaxlogonconnection&t=1604025282858&_=1604025282859,9,616274054,112.232.32.190,3991982,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
  • 2. Проверьте журнал проверки устройства Тестовый сервис.
Язык кода:javascript
копировать
[root@515f0f3d2b8f log]# tail -n 10  appen_visiting.log 
2020-10-30 10:34:10,999 [http-0.0.0.0:82-24$967804219] WARN appen_visiting /ajaxfunction.do?xcase=ajaxlogonconnection&t=1604025241961&_=1604025241962,9,0,103.116.47.92,00,TAzLjExNi40Ny45MjIwMjAxMDIzMTA0NzQwODI5OTkyMjU2NzgM,TExMzk1MzY1MzcxMzA3Nzc6MTAzLjExNi40Ny45Mjo2MTY1NDk4NDQ6NzQwMzEwNQM,jAyMDEwMzAxMDMzMjA1NTIwMDA6MDExNTkzOTQ3MDAzNjA3NzM0MDkM
2020-10-30 10:34:23,414 [http-0.0.0.0:82-22$1268241439] WARN appen_visiting /iar.do?catId=5&xcase=index,85,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,499 [http-0.0.0.0:82-22$1268241439] WARN appen_visiting /eHomeHotActivity.do?xcase=index,48,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,731 [http-0.0.0.0:82-27$1931835655] WARN appen_visiting /eHomeExcellentService.do?xcase=index,46,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,792 [http-0.0.0.0:82-24$1046816159] WARN appen_visiting /eHomeOnlineCourse.do?xcase=index,37,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:23,853 [http-0.0.0.0:82-25$1258927498] WARN appen_visiting /eHomeOnlineCourse.do?demandTypeName=vod&pageNumber=1&xcase=list,36,0,123.234.64.23,00,null,null,null
2020-10-30 10:34:34,005 [http-0.0.0.0:82-25$1268241439] WARN appen_visiting /eHome.do?xcase=sucStoryDetail&pasId=heKnNEDdHxlA,12,0,112.232.32.190,00,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
2020-10-30 10:34:40,561 [http-0.0.0.0:82-17$1585363137] WARN appen_visiting /ajaxfunction.do?xcase=ajaxlogonconnection&time=1604025279782,9,0,112.232.32.190,00,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
2020-10-30 10:34:43,636 [http-0.0.0.0:82-21$1258927498] WARN appen_visiting /ajaxfunction.do?xcase=ajaxlogonconnection&t=1604025282858&_=1604025282859,8,0,112.232.32.190,00,TI0LjEzMy4yMjUuODEyMDIwMDcyMjE1NTAxMTk4NjU2MjY5ODU5M,TExNDAwMjEyMjEyOTk4MzI6MTEyLjIzMi4zMi4xOTA6NjE2Mjc0MDU0OjM5OTE5ODIM,jAyMDEwMzAxMDM0MDAxMDAwMDA6MDE3MDcyMzE3MjYyNzkwMDUyODAM
2020-10-30 10:34:44,518 [http-0.0.0.0:82-20$1908430742] WARN appen_visiting /eHome.do?xcase=index,121,0,168.70.105.82,00,jIxLjE3Ni4xNTQuMTY2MjAyMDA5MjYwODU4MTg4MDU4Mzk4NTY3MwM,TExMzY0NjMwOTM1NTY5NTk6MTQuMS4yOC40NDo2MTU0MDgyNDQ6MzQ5ODQ3MgM,jAyMDEwMzAwOTQwMzcxNTAwMDA6MDUwNjk4MDU0NDEzMzQyMTM1MTEM

7. Ansible пакетный скрипт

Язык кода:javascript
копировать
[root@app1 ansible]# cat hosts_temp
[tcpcopy]
10.1.3.74 ansible_python_interpreter=/usr/bin/python26
10.1.6.233
10.1.6.197
10.1.6.185
10.1.6.215
10.1.6.184
10.1.6.133
10.1.5.4
10.1.5.144
10.1.6.193
10.1.6.157
10.1.3.115 ansible_python_interpreter=/usr/bin/python26
10.1.6.190
10.1.6.208
10.1.6.211
10.1.6.214
192.168.70.232
192.168.3.78
10.1.6.172
192.168.70.148
192.168.77.211
10.1.6.126
10.1.6.162
Язык кода:javascript
копировать
[root@app5 ~]# cat /root/tcpcopy/tcpcopy.sh 
#!/bin/bash
source /etc/profile
/usr/local/tcpcopy/sbin/tcpcopy  -x 7001-10.1.2.41:7001   -s 10.1.2.40  -c  10.1.5.x   -l /var/log/tcpcopy.log -d
Язык кода:javascript
копировать
ansible -i hosts_temp tcpcopy -m shell -a 'pkill tcpcopy'
ansible -i hosts_temp tcpcopy -m shell -a 'sh -x /root/tcpcopy/tcpcopy.sh'
boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода