Uma ferramenta de rede TCP/UDP multifuncional
Netcrab é uma ferramenta de rede de linha de comando que pode fazer muitas coisas. É uma homenagem ao netcat e pode fazer muitas das coisas que pode. Uma breve visão geral do que ele pode fazer:
Para uso completo, execute netcrab --help
.
netcrab HOST:PORT
Isso se conecta ao servidor TCP especificado. Agora seu stdin será enviado ao servidor e o stdout será impresso.
O formato IPv6 para o nome do host deve usar colchetes, por exemplo, localhost é [::1]
.
netcrab -L ADDR:PORT
netcrab -l ADDR:PORT
Você pode escutar como um servidor TCP em uma ou mais portas arbitrárias. Usar -l
sai do programa após a primeira conexão de entrada ser desconectada. Use -L
para "ouvir com mais atenção": continue ouvindo após a desconexão.
A sintaxe ADDR:PORT
suporta algumas variantes especiais:
localhost:5000
:5000
*:5000
O servidor TCP, por padrão, permite apenas que uma única conexão de entrada esteja ativa por vez por endereço de escuta, mas o sinalizador -m max_inbound_clients
permite que mais de uma se conecte.
Tal como acontece com o modo cliente, o stdin é enviado para todos os soquetes conectados e os dados recebidos de todos os soquetes são enviados para o stdout. Isso pode ser alterado usando os argumentos de modo de entrada e saída abaixo.
O argumento -z
faz com que o soquete seja desconectado imediatamente sem permitir o envio de dados. Útil apenas para testar a conectividade.
netcrab -u -L ADDR:PORT
netcrab -u HOST:PORT
O UDP é estranho porque você realmente não se "conecta" com ele. Você se conecta a uma porta local e então envia/recebe datagramas de/para pares remotos. O modo de escuta e o modo de conexão para UDP funcionam exatamente da mesma forma, exceto que no modo de conexão, o primeiro ponto para o qual enviar stdin é conhecido no início, e no modo de escuta, o tráfego stdin não pode ser enviado para lugar nenhum até que o ouvinte receba pelo menos um datagrama de um par.
Para -L
isso suporta a mesma sintaxe ADDR:PORT
acima para TCP.
O tamanho padrão do datagrama é 1 byte, mas pode ser controlado pelo argumento --ss
.
netcrab -L ADDR1:PORT1 -L ADDR2:PORT2
netcrab -u -L ADDR1:PORT1 -L ADDR2:PORT2
Netcrab suporta escuta em vários endereços e portas locais ao mesmo tempo. Aceitará conexões que cheguem em qualquer um deles. Isso suporta TCP e UDP.
netcrab -u --mc HOST:PORT
Netcrab suporta a união de soquetes UDP a grupos multicast adicionando o argumento --mc
. Ele também fornece controles para o TTL para pacotes multicast ( --ttl
) e se deve receber pacotes multicast em loopback, uma vez que o programa está ingressado no grupo ( --mc_no_loop
).
netcrab -u -b HOST:PORT
Netcrab suporta o envio de datagramas de transmissão UDP.
netcrab -i MODE
O modo de entrada pode ser controlado. Por padrão, a entrada vem de stdin. Aceita os seguintes outros modos:
none
: nenhuma entrada é possível. O único tráfego que será processado será de peers remotos.stdin-nochar
: funciona da mesma forma que stdin, mas não ativa o "modo personagem". Isso funciona pior para usos interativos.echo
: qualquer tráfego recebido será retornado ao remetente.rand
: dados aleatórios serão gerados. Os tamanhos aleatórios dos dados podem ser controlados por --rsizemin
e --rsizemax
, e o tipo de dados pode ser controlado por --rvals
.fixed
: realmente útil apenas para testes de desempenho. A mesma mensagem de tamanho fixo com dados fixos será enviada infinitamente. Você pode controlar o tamanho usando --ss
e o tipo de dados aleatórios nele com --rvals
pfqoscli
: mede a latência em relação aos beacons de qualidade de serviço do PlayFab.pfqossrv
: atua como um servidor beacon de qualidade de serviço PlayFab para os clientes direcionarem para medir a latência. Ao usar um dos modos stdin como entrada, você pode especificar --exit-after-input
para encerrar o programa depois que o fluxo de entrada atingir o final do arquivo.
netcrab -o MODE
Por padrão, a saída vai para stdout, mas geralmente é útil alterá-la para -o none
para pular toda a saída. Isso é especialmente útil ao passar por uma grande quantidade de tráfego, pois pode tornar a saída mais lenta.
O modo padrão do Netcrab é usar stdin e stdout, para que você possa redirecionar a entrada de um arquivo e enviar a saída para um arquivo (ou canalizado entre programas).
netcrab HOST:PORT < file
echo message | netcrab HOST:PORT
netcrab -6
netcrab -4
Você pode restringir o uso apenas de famílias de endereços IPv6 ou IPv4. Isso faz mais diferença ao conectar-se a nomes de host que passam pela resolução DNS ou ao escutar sem especificar um endereço de origem explícito.
netcrab -s ADDR:PORT
Ao fazer uma conexão TCP de saída ou enviar datagramas UDP, por padrão o Netcrab se liga aos endereços curinga IPv4 e IPv6 (0.0.0.0:0 e [::]:0). Você pode passar -s
para vincular explicitamente a um endereço. Isto suporta todas as variantes ADDR:PORT
descritas na seção "Servidor TCP".
netcrab HOST1:PORT1 HOST2:PORT2
Netcrab permite conectar-se a mais de um peer remoto ao mesmo tempo. Da mesma forma que escuta múltiplas conexões simultâneas, o tráfego da máquina local será enviado para todos os pares conectados, de entrada ou de saída.
netcrab -L ADDR:PORT HOST:PORT
Netcrab suporta escutar conexões de entrada e fazer conexões de saída ao mesmo tempo. Isso pode ser útil para fazer proxy do tráfego de um endereço local para outro, já que você pode especificar independentemente o endereço para escutar e o endereço de origem a ser usado para a conexão de saída.
netcrab HOST:PORTxNUM
Às vezes é útil poder conectar-se ao mesmo ponto final várias vezes, especialmente para cenários de canais. Por exemplo, para conectar-se a um nome de host 12 vezes, você poderia fazer netcrab localhost:5000x12
. Ele tentará 12 conexões de saída simultâneas com o mesmo nome de host e porta.
Isso também pode ser combinado com vários alvos. Aqui nos conectamos ao localhost em IPv4 cinco vezes e em IPv6 treze vezes. netcrab 127.0.0.1:5000x5 [::1]:5000x13
.
netcrab -r
netcrab -R
No modo de conexão de saída, você pode pedir ao Netcrab para restabelecer uma conexão interrompida. -r
restabelece o fechamento da conexão normal. -R
é restabelecido em caso de erro desagradável. Ambos podem ser especificados ao mesmo tempo, -r -R
ou -rR
.
netcrab --fm channels
netcrab --fm linger-channels
Agora chegamos às partes realmente úteis. O Netcrab pode se transformar em um roteador, encaminhando o tráfego entre vários endpoints. O modo "Canais" permite emparelhar endpoints e encaminhar o tráfego bidirecionalmente de um endpoint para outro, agindo como um proxy transparente. O tráfego não é encaminhado entre canais. Imagine o seguinte diagrama:
+-------------+ +-----------------------------+ +-------------+
| | | netcrab | | |
| HOST1:PORT1 <----> HOST2:PORT1 <-> HOST2:PORT2 <----> HOST3:PORT1 |
| HOST1:PORT2 <----> HOST2:PORT3 <-> HOST2:PORT4 <----> HOST3:PORT2 |
| | | | | |
+-------------+ +-----------------------------+ +-------------+
O primeiro e o segundo canais passam por todo o caminho, mas não cruzam os fluxos. Se o Host 1 ou o Host 3 desconectar um endpoint, a desconexão também será "encaminhada" para a outra extremidade do canal. Se esse comportamento não funcionar para você, você pode mudar para o modo Canais persistentes.
Quando no modo de canais, o máximo de clientes aumenta automaticamente para 10 por endereço de escuta, sob a suposição de que o usuário provavelmente deseja mais de uma conexão por vez para realmente usar os canais. Isso pode ser substituído por -m
.
netcrab --fm hub
O modo Hub é semelhante ao modo canais, mas mais simples: todo o tráfego de todas as fontes da rede é encaminhado de volta para todos os outros soquetes. Você poderia usá-lo para configurar uma sala de bate-papo ou algo assim.
Assim como no modo de canais, quando no modo hub, o máximo de clientes aumenta automaticamente para 10 por endereço de escuta, mas pode ser substituído por -m
.
netcrab -e COMMAND
O Netcrab pode executar outro programa e conectar seu stdin e stdout à rede. Poderia facilmente usá-lo para expor um shell remoto ou algo assim, mas é claro que você deve ter cuidado com isso. Neste modo, a entrada e saída regulares serão desabilitadas.
A string de comando é executada por meio do shell atual.
Praticamente todos os recursos descritos acima podem ser combinados e usados ao mesmo tempo. Por exemplo, você pode escutar vários endereços e conectar-se a vários destinos na mesma sessão enquanto usa o hub para encaminhar entre todas as conexões.