跳到主要内容

网络测试常见操作

UDP的服务端和客户端

服务端

#coding=utf-8
import socket
class tuServer():
# host = ''
# port = ''
def udpT4(self, host, port):
udpT4Server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udpT4Server.bind((host, int(port)))
print("***UDP-IPv4服务启动***")
while True:
udpT4Data, udpT4ServerInfo = udpT4Server.recvfrom(1024)
print("receive a message form:", udpT4ServerInfo, "data:", udpT4Data.decode())

def udpT6(self, host, port):
udpT6Server = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
udpT6Server.bind((host, int(port)))
print("***UDP-IPv6服务启动***")
while True:
udpT4Data, udpT6ServerInfo = udpT6Server.recvfrom(1024)
print("receive a message form:", udpT6ServerInfo[:2], "data:", udpT4Data.decode())

if __name__ == "__main__":
x = tuServer()
x.udpT4("1.2.3.5", 88)
x.udpT6("2025:304:1540:1:8000::196", 88)

客户端

# coding=utf-8
import socket
import time
class tuClient:
# V4客户端
def udpC4(self, host, port, host1, port1):
udpT4Client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
udpT4Client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
udpT4Client.bind((host1, int(port1)))
print("...UDP IPv4 连接成功...")
while True:
time.sleep(1)
udpT4Client.sendto("hello v4 udp".encode(), (host, int(port)))
print("send a message hello", host,port)

# V6客户端
def udpC6(self, host, port, host1, port1):
udpT4Client = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
udpT4Client.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
udpT4Client.bind((host1, int(port1)))
print("...UDP IPv6 连接成功...")
while True:
time.sleep(1)
udpT4Client.sendto("hello v6 udp".encode(), (host, int(port)))
print("send a message hello", host,port)
if __name__ == "__main__":
x = tuClient()
# (对端IP,对端port,本端IP,本端port)
# x.udpC4("1.2.3.4", "7070", "1.2.3.5", "87")
x.udpC6("2025:304:1540:1:8000::220", "7070", "2025:304:1540:1:8000::2c6", "87")

启动https服务器

准备证书

openssl genpkey -algorithm RSA -out server.key
openssl req -new -x509 -key server.key -out server.crt

服务端代码

import BaseHTTPServer
import ssl

class MyRequestHandler(BaseHTTPServer.BaseHTTPRequestHandler):
def do_GET(self):
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
self.wfile.write("Hello, HTTPS World!")

server_address = ('', 4443)

httpd = BaseHTTPServer.HTTPServer(server_address, MyRequestHandler)

httpd.socket = ssl.wrap_socket(httpd.socket, keyfile="server.key", certfile="server.crt", server_side=True)

print("Starting HTTPS server on https://localhost:4443...")
httpd.serve_forever()

启动服务

python https_server.py

pfx证书制作

#!/bin/bash

# 定义密码和域名
PASSWORD="yourpassword"
DOMAIN1="test1.test"
DOMAIN2="test2.test"

# 生成第一个证书和私钥
openssl req -newkey rsa:2048 -nodes -keyout test1.key -x509 -days 365 -out test1.crt -subj "/CN=${DOMAIN1}"
openssl pkcs12 -export -out test1.pfx -inkey test1.key -in test1.crt

# 生成第二个证书和私钥
openssl req -newkey rsa:2048 -nodes -keyout test2.key -x509 -days 365 -out test2.crt -subj "/CN=${DOMAIN2}"
openssl pkcs12 -export -out test2.pfx -inkey test2.key -in test2.crt

# 清理中间文件
# rm test1.key test1.crt test2.key test2.crt

echo "Certificates generated: test1.pfx and test2.pfx"
#echo "Certificates generated success!"

查看haproxy当前连接数

通过命令cat /etc/haproxy/haproxy.cfg | grep sock查找sock文件

# octavia
echo "show stat" | socat unix-connect:/var/lib/octavia/9416b61c-7af4-4c6c-bf6c-4ef04ffdb3f7.sock stdio

# haproxy
echo "show stat" | socat unix-connect:/var/run/haproxy.stat stdio

第5项指标scur就是

netperf性能测试

警告

一般情况下,建议客户端从单线程逐步加压,不建议一开始就用超过8线程加压。

正确的测试方式应该是,从单台客户端逐步增加至多台,直至测试出网络瓶颈。

灌包测试,使用多个端口同时进行udp灌包测试

首先:服务器端和客户端安装netperf,解除系统限制

服务端

#!/bin/bash
for j in `seq 64`; do
netserver -p $[16000+j] > server_$[16000+j].netperf > /dev/null 2>&1 &
done

客户端

#!/bin/bash
server_ip=$1
for j in `seq 64`; do
port=$[16000+j]
netperf -H ${server_ip} -l ${run_time:-300} -t UDP_STREAM -p $port -- -m 1 -D > /dev/null 2>&1 &
done

《TCP_STREAM》

#!/bin/bash
server_ip=$1
for j in `seq 64`; do
port=$[16000+j]
netperf -H ${server_ip} -l ${run_time:-300} -t TCP_STREAM -p $port -- -D > /dev/null 2>&1 &
done

使用

服务端启动:
./server.sh

客户端启动:
./gb.sh 目标节点ip
./gb.sh 1.1.1.2