
CLI multiplataforma para testes de desempenho de rede via TCP, UDP, HTTP, HTTPS e ICMP: largura de banda, conexões/s, pacotes/s, latência, perda, jitter, ping e traceroute.
O Ethr é uma ferramenta multiplataforma de medição de desempenho de rede escrita em golang. O objetivo deste projeto é fornecer uma ferramenta nativa para medições abrangentes de desempenho de rede de largura de banda, conexões/s, pacotes/s, latência, perda e jitter, em vários protocolos, como TCP, UDP, HTTP, HTTPS, e em várias plataformas, como Windows, Linux e outros sistemas Unix.
O Ethr se inspira em ferramentas de desempenho de rede de código aberto existentes e desenvolve essas ideias. Para medição de largura de banda, é semelhante ao iPerf3, para tráfego TCP e UDP. O iPerf3 tem muito mais opções para isso, como testes com limitação de banda, conjunto de recursos mais rico, enquanto o Ethr tem suporte a múltiplas threads, o que lhe permite escalar para 1024 ou até mais conexões, comunicação de vários clientes com um único servidor etc. Para medições de latência, é semelhante ao latte no Windows ou ao sockperf no Linux.
O Ethr oferece mais medições de teste em comparação com outras ferramentas, por exemplo, fornece medições de largura de banda, conexões/s, pacotes/s, latência e latência de estabelecimento de conexão TCP, tudo em uma única ferramenta. No futuro, há planos de adicionar mais recursos (esperando que outros contribuam), bem como mais suporte a protocolos, para torná-lo uma ferramenta abrangente para medições de desempenho de rede.
O Ethr é nativamente multiplataforma, graças ao golang, em comparação com a compilação por meio de uma camada de abstração como o cygwin, que pode limitar a funcionalidade. Ele espera unificar a medição de desempenho combinando a funcionalidade de ferramentas como iPerf3, ntttcp, psping, sockperf e latte, oferecendo uma única ferramenta em várias plataformas e vários protocolos.
https://github.com/Microsoft/ethr/releases/latest
Linux
wget https://github.com/microsoft/ethr/releases/latest/download/ethr_linux.zip
unzip ethr_linux.zip
Windows Powershell
wget https://github.com/microsoft/ethr/releases/latest/download/ethr_windows.zip -OutFile ethr_windows.zip
Expand-Archive .\ethr_windows.zip -DestinationPath .
OSX
wget https://github.com/microsoft/ethr/releases/latest/download/ethr_osx.zip
unzip ethr_osx.zip
Nota: a versão 1.11 ou superior do go é necessária para compilar a partir do código-fonte.
Usamos o go-module para gerenciar as dependências do Ethr. Para mais informações, consulte como usar go-modules!
git clone https://github.com/Microsoft/ethr.git
cd ethr
go build
Se o ethr for clonado dentro da árvore $GOPATH/src, certifique-se de invocar o comando go com GO111MODULE=on!
Construa a imagem usando o comando:
docker build -t microsoft/ethr .
Gere o binário:
Linux
docker run -e GOOS=linux -v $(pwd):/out microsoft/ethr make build-docker
Windows
docker run -e BINARY_NAME=ethr.exe -e GOOS=windows -v $(pwd):/out microsoft/ethr make build-docker
OS X
docker run -e BINARY_NAME=ethr -e GOOS=darwin -v $(pwd):/out microsoft/ethr make build-docker
go get github.com/microsoft/ethr
Supondo que você esteja usando o yay (https://github.com/Jguer/yay):
yay -S ethr
Siga o tópico Compilação a partir do código-fonte para compilar ethr.exe
Modifique o ethr.nuspec para adicionar a nova versão de lançamento
vim ethr.nuspec
Crie um pacote nuget (como Ethr.0.2.1.nupkg)
nuget.exe pack ethr.nuspec
Envie o pacote para nuget.org.
Ajuda:
ethr -h
Servidor:
ethr -s
Servidor com interface de texto:
ethr -s -ui
Cliente:
ethr -c <server ip>
Exemplos:
// Start server
ethr -s
// Start client for default (bandwidth) test measurement using 1 thread
ethr -c localhost
// Start bandwidth test using 8 threads
ethr -c localhost -n 8
// Start connections/s test using 64 threads to server 10.1.0.11
ethr -c 10.1.0.11 -t c -n 64
// Run Ethr server on port 9999
./ethr -s -port 9999
// Measure TCP connection setup latency to ethr server on port 9999
// Assuming Ethr server is running on server with IP address: 10.1.1.100
./ethr -c 10.1.1.100 -p tcp -t pi -d 0 -4 -port 9999
// Measure TCP connection setup latency to www.github.com at port 443
./ethr -x www.github.com:443 -p tcp -t pi -d 0 -4
// Measure TCP connection setup latency to www.github.com at port 443
// Note: Here port 443 is driven automatically from https
./ethr -x https://www.github.com -p tcp -t pi -d 0 -4
// Measure ICMP ping latency to www.github.com
sudo ./ethr -x www.github.com -p icmp -t pi -d 0 -4
// Run measurement similar to mtr on Linux
sudo ./ethr -x www.github.com -p icmp -t mtr -d 0 -4
// Measure packets/s over UDP by sending small 1-byte packets
./ethr -c 172.28.192.1 -p udp -t p -d 0
Para testes relacionados a ICMP, Ping, TraceRoute, MyTraceRoute, o Windows exige que o ICMP seja permitido pelo Firewall. Isso pode ser feito usando o PowerShell pelos seguintes comandos. No entanto, use isso apenas se a política de segurança da sua configuração permitir.
// Allow ICMP packets via Firewall for IPv4
New-NetFirewallRule -DisplayName "ICMP_Allow_Any" -Direction Inbound -Protocol ICMPv4 -IcmpType Any -Action Allow -Profile Any -RemotePort Any
// Allow ICMP packets via Firewall for IPv6
New-NetFirewallRule -DisplayName "ICMPV6_Allow_Any" -Direction Inbound -Protocol ICMPv6 -IcmpType Any -Action Allow -Profile Any -RemotePort Any
Além disso, para TraceRoute e MyTraceRoute baseados em TCP, o modo Administrador é necessário; caso contrário, o Ethr não conseguirá receber mensagens de TTL excedido do ICMP.
Para Ping ICMP, TraceRoute ICMP/TCP e MyTraceRoute, o modo privilegiado é necessário via sudo.
-h
Help
-no
Disable logging to file. Logging to file is enabled by default.
-o <filename>
Name of log file. By default, following file names are used:
Server mode: 'ethrs.log'
Client mode: 'ethrc.log'
-debug
Enable debug information in logging output.
-4
Use only IP v4 version
-6
Use only IP v6 version
In this mode, Ethr runs as a server, allowing multiple clients to run
performance tests against it.
-s
Run in server mode.
-ip <string>
Bind to specified local IP address for TCP & UDP tests.
This must be a valid IPv4 or IPv6 address.
Default: <empty> - Any IP
-port <number>
Use specified port number for TCP & UDP tests.
Default: 8888
-ui
Show output in text UI.
In this mode, Ethr client can only talk to an Ethr server.
-c <server>
Run in client mode and connect to <server>.
Server is specified using name, FQDN or IP address.
-b <rate>
Transmit only Bits per second (format: <num>[K | M | G])
Only valid for Bandwidth tests. Default: 0 - Unlimited
Examples: 100 (100bits/s), 1M (1Mbits/s).
-cport <number>
Use specified local port number in client for TCP & UDP tests.
Default: 0 - Ephemeral Port
-d <duration>
Duration for the test (format: <num>[ms | s | m | h]
0: Run forever
Default: 10s
-g <gap>
Time interval between successive measurements (format: <num>[ms | s | m | h]
Only valid for latency, ping and traceRoute tests.
0: No gap
Default: 1s
-i <iterations>
Number of round trip iterations for each latency measurement.
Only valid for latency testing.
Default: 1000
-ip <string>
Bind to specified local IP address for TCP & UDP tests.
This must be a valid IPv4 or IPv6 address.
Default: <empty> - Any IP
-l <length>
Length of buffer to use (format: <num>[KB | MB | GB])
Only valid for Bandwidth tests. Max 1GB.
Default: 16KB
-n <number>
Number of Parallel Sessions (and Threads).
0: Equal to number of CPUs
Default: 1
-p <protocol>
Protocol ("tcp", "udp", "http", "https", or "icmp")
Default: tcp
-port <number>
Use specified port number for TCP & UDP tests.
Default: 8888
-r
For Bandwidth tests, send data from server to client.
-t <test>
Test to run ("b", "c", "p", "l", "cl" or "tr")
b: Bandwidth
c: Connections/s
p: Packets/s
l: Latency, Loss & Jitter
pi: Ping Loss & Latency
tr: TraceRoute
mtr: MyTraceRoute with Loss & Latency
Default: b - Bandwidth measurement.
-tos
Specifies 8-bit value to use in IPv4 TOS field or IPv6 Traffic Class field.
-w <number>
Use specified number of iterations for warmup.
Default: 1
-T <string>
Use the given title in log files for logging results.
Default: <empty>
In this mode, Ethr talks to a non-Ethr server. This mode supports only a
few types of measurements, such as Ping, Connections/s and TraceRoute.
-x <destination>
Run in external client mode and connect to <destination>.
<destination> is specified in URL or Host:Port format.
For URL, if port is not specified, it is assumed to be 80 for http and 443 for https.
Example: For TCP - www.microsoft.com:443 or 10.1.0.4:22 or https://www.github.com
For ICMP - www.microsoft.com or 10.1.0.4
-cport <number>
Use specified local port number in client for TCP & UDP tests.
Default: 0 - Ephemeral Port
-d <duration>
Duration for the test (format: <num>[ms | s | m | h]
0: Run forever
Default: 10s
-g <gap>
Time interval between successive measurements (format: <num>[ms | s | m | h]
Only valid for latency, ping and traceRoute tests.
0: No gap
Default: 1s
-ip <string>
Bind to specified local IP address for TCP & UDP tests.
This must be a valid IPv4 or IPv6 address.
Default: <empty> - Any IP
-n <number>
Number of Parallel Sessions (and Threads).
0: Equal to number of CPUs
Default: 1
-p <protocol>
Protocol ("tcp", or "icmp")
Default: tcp
-t <test>
Test to run ("c", "cl", or "tr")
c: Connections/s
pi: Ping Loss & Latency
tr: TraceRoute
mtr: MyTraceRoute with Loss & Latency
Default: pi - Ping Loss & Latency.
-tos
Specifies 8-bit value to use in IPv4 TOS field or IPv6 Traffic Class field.
-w <number>
Use specified number of iterations for warmup.
Default: 1
-T <string>
Use the given title in log files for logging results.
Default: <empty>
Windows
Testado: Windows 10, Windows 7 SP1
Não testado: outras versões do Windows
Linux
Testado: Ubuntu Linux 18.04.1 LTS, OpenSuse Leap 15
Não testado: outras versões do Linux
OSX
Testado: OSX é testado por colaboradores
Outros
Nenhuma outra plataforma é testada neste momento
Os itens de trabalho da lista de tarefas são mostrados abaixo. Contribuições são muito bem-vindas para esses itens ou para quaisquer outros recursos e correções de bugs.
Este projeto recebe contribuições e sugestões. A maioria das contribuições exige que você concorde com um Contrato de Licença de Contribuidor (CLA), declarando que você tem o direito de nos conceder, e de fato concede, os direitos de usar sua contribuição. Para obter detalhes, visite https://cla.microsoft.com.
Ao enviar um pull request, um CLA-bot determinará automaticamente se você precisa fornecer um CLA e decorará o PR adequadamente (por exemplo, etiqueta, comentário). Basta seguir as instruções fornecidas pelo bot. Você só precisará fazer isso uma vez em todos os repositórios que usam nosso CLA.
Este projeto adotou o Código de Conduta de Código Aberto da Microsoft. Para obter mais informações, consulte as Perguntas frequentes sobre o Código de Conduta ou entre em contato [email protected] com quaisquer perguntas ou comentários adicionais.
| Protocolo | Largura de banda | Conexões/s | Pacotes/s | Latência | Ping | TraceRoute | MyTraceRoute |
|---|
| TCP | Sim | Sim | NA | Sim | Sim | Sim | Sim |
| UDP | Sim | NA | Sim | Não | NA | Não | Não |
| ICMP | Não | NA | NA | NA | Sim | Sim | Sim |