Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
frp — Um proxy reverso rápido para ajudá-lo a expor um servidor local atrás de um NAT ou firewall para a internet. | Kitploit
Ferramentas/GitHubGitHub/fatedier/frp
Segurança de RedeTestes de PenetraçãoUtilitários e FrameworksRed Teaming
GitHubfatedier/frp

frp

Um proxy reverso rápido para ajudá-lo a expor um servidor local atrás de um NAT ou firewall para a internet.

Ver Repositório
108.2k15.1k1há 22h 59mRevisado pelo Kitploit

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

frp

Build Status GitHub release GitHub Releases Stats

README | 中文文档

Patrocinadores

frp é um projeto de código aberto cujo desenvolvimento contínuo é possível inteiramente pelo apoio dos nossos incríveis patrocinadores. Se você gostaria de se juntar a eles, considere patrocinar o desenvolvimento do frp.

Patrocinadores Ouro


A IDE completa criada para desenvolvedores Go profissionais


A nuvem soberana que coloca você no controle
Uma alternativa de código aberto e auto-hospedada às nuvens públicas, construída para propriedade de dados e privacidade

Recall.ai - API para gravações de reuniões

Se você está procurando uma API de gravação de reuniões, considere conferir o Recall.ai,

uma API que grava Zoom, Google Meet, Microsoft Teams, reuniões presenciais e muito mais.

O que é o frp?

frp é um proxy reverso rápido que permite expor um servidor local localizado atrás de um NAT ou firewall para a Internet. Atualmente suporta os protocolos TCP e UDP, bem como HTTP e HTTPS, permitindo que as solicitações sejam encaminhadas para serviços internos por meio de nome de domínio.

frp também oferece um modo de conexão P2P.

Índice

  • Status de Desenvolvimento
    • Sobre a V2
  • Arquitetura
  • Exemplo de Uso
    • Acesse seu computador em uma rede LAN via SSH
    • Vários serviços SSH compartilhando a mesma porta
    • Acessando serviços web internos com domínios personalizados na LAN
    • Encaminhar solicitações de consulta DNS
    • Encaminhar Unix Domain Socket
    • Expor um servidor de arquivos HTTP simples
    • Habilitar HTTPS para um serviço HTTP(S) local
    • Expor seu serviço de forma privada
    • Modo P2P
  • Recursos
    • Arquivos de Configuração
    • Usando Variáveis de Ambiente
    • Dividir Configurações em Arquivos Diferentes
    • Painel do Servidor
    • Interface de Administração do Cliente
      • Gerenciamento Dinâmico de Proxies (Store)
    • Monitoramento
      • Prometheus
    • Autenticando o Cliente
      • Autenticação por Token
      • Autenticação OIDC
    • Criptografia e Compressão
      • TLS
    • Recarregamento a quente da configuração do frpc
    • Obter status do proxy a partir do cliente
    • Permitindo apenas certas portas no servidor
    • Reutilização de Porta
    • Limite de Largura de Banda
      • Para Cada Proxy
    • Multiplexação de Fluxo TCP
    • Suporte ao Protocolo KCP
    • Suporte ao Protocolo QUIC
    • Pool de Conexões
    • Balanceamento de Carga
    • Verificação de Saúde do Serviço
    • Reescrevendo o Cabeçalho HTTP Host
    • Definindo outros cabeçalhos HTTP
    • Obter IP Real
      • HTTP X-Forwarded-For
      • Proxy Protocol
    • Exigir Autenticação Básica HTTP (Senha) para Serviços Web
    • Nomes de Subdomínio Personalizados
    • Roteamento de URL
    • Multiplexação de Porta TCP
    • Conectando ao frps via PROXY
    • Mapeamento de Faixa de Portas
    • Plugins do Cliente
    • Plugins de Gerenciamento do Servidor
    • Gateway de Túnel SSH
    • Rede Virtual (VirtualNet)
  • Feature Gates
    • Feature Gates Disponíveis
    • Habilitando Feature Gates
    • Ciclo de Vida dos Feature Gates
  • Projetos Relacionados
  • Contribuindo
  • Doação
    • Patrocinadores do GitHub
    • PayPal

Status de Desenvolvimento

frp está atualmente em desenvolvimento. Você pode experimentar a versão de lançamento mais recente no branch master, ou usar o branch dev para acessar a versão atualmente em desenvolvimento.

Estamos atualmente trabalhando na versão 2 e tentando realizar algumas refatorações e melhorias de código. No entanto, observe que ela não será compatível com a versão 1.

Faremos a transição da versão 0 para a versão 1 no momento apropriado e aceitaremos apenas correções de bugs e melhorias, em vez de grandes solicitações de recursos.

Sobre a V2

A complexidade e a dificuldade da versão v2 são muito maiores do que o previsto. Só posso trabalhar em seu desenvolvimento durante períodos de tempo fragmentados, e as interrupções constantes prejudicam significativamente a produtividade. Diante dessa situação, continuaremos a otimizar e iterar na versão atual até termos mais tempo livre para prosseguir com a grande reformulação da versão.

O conceito por trás da v2 é baseado em meus anos de experiência e reflexão no domínio cloud-native, particularmente em K8s e ServiceMesh. Seu núcleo é um proxy modernizado de camada quatro e camada sete, semelhante ao envoy. Esse proxy em si é altamente escalável, não apenas capaz de implementar a funcionalidade de penetração de intranet, mas também aplicável a vários outros domínios. Com base nesse núcleo altamente escalável, pretendemos implementar todos os recursos do frp v1, além de abordar as funcionalidades que anteriormente eram inalcançáveis ou difíceis de implementar de maneira elegante. Além disso, manteremos capacidades eficientes de desenvolvimento e iteração.

Além disso, imagino que o próprio frp se torne um sistema e plataforma altamente extensíveis, semelhante à forma como podemos fornecer uma gama de capacidades de extensão baseadas em K8s. No K8s, podemos personalizar o desenvolvimento de acordo com as necessidades da empresa, utilizando recursos como CRD, modo controller, webhook, CSI e CNI. No frp v1, introduzimos o conceito de plugins de servidor, que implementou alguma extensibilidade básica. No entanto, ele depende de um protocolo HTTP simples e exige que os usuários iniciem processos independentes e os gerenciem por conta própria. Essa abordagem está longe de ser flexível e conveniente, e as demandas do mundo real variam muito. É irrealista esperar que um projeto de código aberto sem fins lucrativos mantido por algumas pessoas atenda às necessidades de todos.

Por fim, reconhecemos que o design atual de módulos como gerenciamento de configuração, verificação de permissões, gerenciamento de certificados e gerenciamento de API não é moderno o suficiente. Embora possamos realizar algumas otimizações na versão v1, garantir a compatibilidade continua sendo um problema desafiador que exige uma quantidade considerável de esforço para ser resolvido.

Agradecemos sinceramente seu apoio ao frp.

Arquitetura

architecture

Exemplo de Uso

Para começar, baixe o programa mais recente para seu sistema operacional e arquitetura na página de Release.

Em seguida, coloque o binário frps e o arquivo de configuração do servidor no Servidor A, que possui um endereço IP público.

Por fim, coloque o binário frpc e o arquivo de configuração do cliente no Servidor B, que está localizado em uma LAN que não pode ser acessada diretamente pela internet pública.

Alguns antivírus marcam incorretamente o frpc como malware e o excluem. Isso se deve ao fato de o frp ser uma ferramenta de rede capaz de criar proxies reversos. Os antivírus às vezes sinalizam proxies reversos devido à sua capacidade de contornar restrições de portas de firewall. Se você estiver usando antivírus, talvez precise adicionar o frpc à lista de permissões/exclusões nas configurações do seu antivírus para evitar quarentena/exclusão acidental. Consulte a issue 3637 para mais detalhes.

Acesse seu computador em uma rede LAN via SSH

  1. Modifique o frps.toml no servidor A definindo o bindPort para que os clientes frp se conectem: ```toml

frps.toml

bindPort = 7000

root@kitploit:~
2. Inicie o `frps` no servidor A:

`./frps -c ./frps.toml`

3. Modifique o `frpc.toml` no servidor B e defina o campo `serverAddr` para o endereço IP público do seu servidor frps:  ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

Note que o localPort (escuta no cliente) e o remotePort (exposto no servidor) são usados para o tráfego que entra e sai do sistema frp, enquanto o serverPort é usado para a comunicação entre o frps e o frpc.

  1. Inicie o frpc no servidor B:

./frpc -c ./frpc.toml

  1. Para acessar o servidor B a partir de outra máquina através do servidor A via SSH (assumindo que o nome de usuário é test), use o seguinte comando:

ssh -oPort=6000 [email protected]

Vários serviços SSH compartilhando a mesma porta

Este exemplo implementa vários serviços SSH expostos através da mesma porta usando um proxy do tipo tcpmux. Da mesma forma, desde que o cliente suporte o método de conexão de proxy HTTP Connect, a reutilização de porta pode ser alcançada dessa maneira.

  1. Implante o frps em uma máquina com IP público e modifique o arquivo frps.toml. Aqui está uma configuração simplificada: ```toml bindPort = 7000 tcpmuxHTTPConnectPort = 5002
root@kitploit:~
2. Implemente o frpc na máquina interna A com a seguinte configuração:  ```toml
serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "ssh1"
type = "tcpmux"
multiplexer = "httpconnect"
customDomains = ["machine-a.example.com"]
localIP = "127.0.0.1"
localPort = 22
  1. Implemente outro frpc na máquina interna B com a seguinte configuração: ```toml serverAddr = "x.x.x.x" serverPort = 7000

[[proxies]] name = "ssh2" type = "tcpmux" multiplexer = "httpconnect" customDomains = ["machine-b.example.com"] localIP = "127.0.0.1" localPort = 22

root@kitploit:~
4. Para acessar a máquina interna A usando SSH ProxyCommand, assumindo que o nome de usuário é "test":

`ssh -o 'proxycommand socat - PROXY:x.x.x.x:%h:%p,proxyport=5002' [email protected]`

5. Para acessar a máquina interna B, a única diferença é o nome de domínio, assumindo que o nome de usuário é "test":

`ssh -o 'proxycommand socat - PROXY:x.x.x.x:%h:%p,proxyport=5002' [email protected]`

### Acessando Serviços Web Internos com Domínios Personalizados na LAN

Às vezes, precisamos expor um serviço web local atrás de uma rede NAT para outras pessoas para fins de teste com nosso próprio nome de domínio.

Infelizmente, não podemos resolver um nome de domínio para um IP local. No entanto, podemos usar o frp para expor um serviço HTTP(S).

1. Modifique o `frps.toml` e defina a porta HTTP para vhost como 8080:  ```toml
# frps.toml
bindPort = 7000
vhostHTTPPort = 8080

Se quiser configurar um proxy https, você precisa definir o vhostHTTPSPort.

  1. Inicie o frps:

./frps -c ./frps.toml

  1. Modifique o frpc.toml e defina serverAddr para o endereço IP do servidor frps remoto. Especifique o localPort do seu serviço web: ```toml

frpc.toml

serverAddr = "x.x.x.x" serverPort = 7000

[[proxies]] name = "web" type = "http" localPort = 80 customDomains = ["www.example.com"]

root@kitploit:~
4. Inicie o `frpc`:

`./frpc -c ./frpc.toml`

5. Mapeie o registro A de `www.example.com` para o IP público do servidor frps remoto ou um registro CNAME apontando para o seu domínio original.

6. Acesse o seu serviço web local usando a url `http://www.example.com:8080`.

### Encaminhar solicitações de consulta DNS

1. Modifique o `frps.toml`:  ```toml
# frps.toml
bindPort = 7000
  1. Inicie o frps:

./frps -c ./frps.toml

  1. Modifique o frpc.toml e defina serverAddr para o endereço IP do servidor frps remoto. Encaminhe as solicitações de consulta DNS para o servidor DNS público do Google 8.8.8.8:53: ```toml

frpc.toml

serverAddr = "x.x.x.x" serverPort = 7000

[[proxies]] name = "dns" type = "udp" localIP = "8.8.8.8" localPort = 53 remotePort = 6000

root@kitploit:~
4. Inicie o frpc:

`./frpc -c ./frpc.toml`

5. Teste a resolução de DNS usando o comando `dig`:

`dig @x.x.x.x -p 6000 www.google.com`

### Encaminhar Unix Domain Socket

Exponha um Unix domain socket (por exemplo, o socket do daemon Docker) como TCP.

Configure o `frps` como acima.

1. Inicie o `frpc` com a seguinte configuração:  ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "unix_domain_socket"
type = "tcp"
remotePort = 6000
[proxies.plugin]
type = "unix_domain_socket"
unixPath = "/var/run/docker.sock"
  1. Teste a configuração obtendo a versão do docker usando curl:

curl http://x.x.x.x:6000/version

Expor um servidor HTTP de arquivos simples

Exponha um servidor HTTP de arquivos simples para acessar arquivos armazenados na LAN a partir da Internet pública.

Configure o frps conforme descrito acima e, em seguida:

  1. Inicie o frpc com a seguinte configuração: ```toml

frpc.toml

serverAddr = "x.x.x.x" serverPort = 7000

[[proxies]] name = "test_static_file" type = "tcp" remotePort = 6000 [proxies.plugin] type = "static_file" localPath = "/tmp/files" stripPrefix = "static" httpUser = "abc" httpPassword = "abc"

root@kitploit:~
2. Visite `http://x.x.x.x:6000/static/` a partir do seu navegador e especifique o nome de utilizador e a palavra-passe corretos para visualizar os ficheiros em `/tmp/files` na máquina `frpc`.

### Ativar HTTPS para um serviço HTTP(S) local

Pode substituir o plugin por `https2https` e apontar o `localAddr` para um endpoint HTTPS.

1. Inicie o `frpc` com a seguinte configuração:  ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "test_https2http"
type = "https"
customDomains = ["test.example.com"]

[proxies.plugin]
type = "https2http"
localAddr = "127.0.0.1:80"
crtPath = "./server.crt"
keyPath = "./server.key"
hostHeaderRewrite = "127.0.0.1"
requestHeaders.set.x-from-where = "frp"
  1. Visite https://test.example.com.

Exponha seu serviço de forma privada

Para mitigar os riscos associados à exposição de determinados serviços diretamente à rede pública, o modo STCP (TCP Secreto) exige que uma chave pré-compartilhada seja usada para acesso ao serviço a partir de outros clientes.

Configure o frps da mesma forma que acima.

  1. Inicie o frpc na máquina B com a seguinte configuração. Este exemplo é para expor o serviço SSH (porta 22), e observe o campo secretKey para a chave pré-compartilhada, e que o campo remotePort foi removido aqui: ```toml

frpc.toml

serverAddr = "x.x.x.x" serverPort = 7000

[[proxies]] name = "secret_ssh" type = "stcp" secretKey = "abcdefg" localIP = "127.0.0.1" localPort = 22

root@kitploit:~
2. Inicie outro `frpc` (normalmente em outra máquina C) com a seguinte configuração para acessar o serviço SSH com uma chave de segurança (campo `secretKey`):  ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000

[[visitors]]
name = "secret_ssh_visitor"
type = "stcp"
serverName = "secret_ssh"
secretKey = "abcdefg"
bindAddr = "127.0.0.1"
bindPort = 6000
  1. Na máquina C, conecte-se via SSH à máquina B, usando este comando:

ssh -oPort=6000 127.0.0.1

Modo P2P

xtcp foi projetado para transmitir grandes quantidades de dados diretamente entre clientes. Um servidor frps ainda é necessário, pois P2P aqui se refere apenas à transmissão real de dados.

Observe que pode não funcionar com todos os tipos de dispositivos NAT. Talvez você queira usar stcp como alternativa se o xtcp não funcionar.

  1. Inicie o frpc na máquina B e exponha a porta SSH. Observe que o campo remotePort foi removido: ```toml

frpc.toml

serverAddr = "x.x.x.x" serverPort = 7000

set up a new stun server if the default one is not available.

natHoleStunServer = "xxx"

[[proxies]] name = "p2p_ssh" type = "xtcp" secretKey = "abcdefg" localIP = "127.0.0.1" localPort = 22

root@kitploit:~
2. Inicie outro `frpc` (normalmente em outra máquina C) com a configuração para conectar ao SSH usando o modo P2P:  ```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000
# set up a new stun server if the default one is not available.
# natHoleStunServer = "xxx"

[[visitors]]
name = "p2p_ssh_visitor"
type = "xtcp"
serverName = "p2p_ssh"
secretKey = "abcdefg"
bindAddr = "127.0.0.1"
bindPort = 6000
# when automatic tunnel persistence is required, set it to true
keepTunnelOpen = false
  1. Na máquina C, conecte-se via SSH à máquina B, usando este comando:

ssh -oPort=6000 127.0.0.1

Recursos

Arquivos de Configuração

Desde a v0.52.0, oferecemos suporte a TOML, YAML e JSON para configuração. Observe que o INI está obsoleto e será removido em versões futuras. Novos recursos estarão disponíveis apenas em TOML, YAML ou JSON. Usuários que desejarem esses novos recursos devem alterar o formato de configuração de acordo.

Leia os arquivos de configuração de exemplo completos para descobrir ainda mais recursos não descritos aqui.

Os exemplos usam o formato TOML, mas você ainda pode usar YAML ou JSON.

Esses arquivos de configuração servem apenas como referência. Não use esta configuração diretamente para executar o programa, pois ela pode apresentar vários problemas.

Arquivo de configuração completo para frps (Servidor)

Arquivo de configuração completo para frpc (Cliente)

Usando Variáveis de Ambiente

Variáveis de ambiente podem ser referenciadas no arquivo de configuração, usando o formato padrão do Go:```toml

frpc.toml

serverAddr = "{{ .Envs.FRP_SERVER_ADDR }}" serverPort = 7000

[[proxies]] name = "ssh" type = "tcp" localIP = "127.0.0.1" localPort = 22 remotePort = {{ .Envs.FRP_SSH_REMOTE_PORT }}

root@kitploit:~
Com a configuração acima, as variáveis podem ser passadas para o programa `frpc` desta forma:```
export FRP_SERVER_ADDR=x.x.x.x
export FRP_SSH_REMOTE_PORT=6000
./frpc -c ./frpc.toml

frpc renderizará o modelo de arquivo de configuração usando variáveis de ambiente do sistema operacional. Lembre-se de prefixar sua referência com .Envs.

Dividir Configurações em Arquivos Diferentes

Você pode dividir múltiplas configurações de proxy em arquivos diferentes e incluí-las no arquivo principal.```toml

frpc.toml

serverAddr = "x.x.x.x" serverPort = 7000 includes = ["./confd/*.toml"]

root@kitploit:~
I need the input content to translate. Please provide the Markdown chunk you'd like me to translate from English to Portuguese.```toml
# ./confd/test.toml

[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 6000

Server Dashboard

Verifique o status do frp e as informações estatísticas dos proxies através do Dashboard.

Configure uma porta para o dashboard para habilitar este recurso:```toml

The default value is 127.0.0.1. Change it to 0.0.0.0 when you want to access it from a public network.

webServer.addr = "0.0.0.0" webServer.port = 7500

dashboard's username and password are both optional

webServer.user = "admin" webServer.password = "admin"

root@kitploit:~
Em seguida, visite `http://[serverAddr]:7500` para ver o painel, com nome de utilizador e palavra-passe ambos `admin`.

Além disso, pode utilizar a porta HTTPS usando o certificado SSL curinga ou normal dos seus domínios:```toml
webServer.port = 7500
# dashboard's username and password are both optional
webServer.user = "admin"
webServer.password = "admin"
webServer.tls.certFile = "server.crt"
webServer.tls.keyFile = "server.key"

Em seguida, visite https://[serverAddr]:7500 para ver o painel em uma conexão HTTPS segura, com nome de usuário e senha ambos sendo admin.

dashboard

Interface de Administração do Cliente

A Interface de Administração do Cliente ajuda você a verificar e gerenciar a configuração e os proxies do frpc.

Configure um endereço para a interface de administração para habilitar esse recurso:```toml webServer.addr = "127.0.0.1" webServer.port = 7400 webServer.user = "admin" webServer.password = "admin"

root@kitploit:~
Depois visite `http://127.0.0.1:7400` para ver a interface de administração, com nome de utilizador e palavra-passe ambos `admin`.

#### Gestão Dinâmica de Proxies (Store)

Pode criar, atualizar e eliminar dinamicamente proxies e visitantes em tempo de execução através da interface Web ou da API, sem reiniciar o frpc.

Para ativar esta funcionalidade, configure `store.path` para especificar um ficheiro onde as configurações serão persistidas:```toml
[store]
path = "./db.json"

Proxies e visitantes gerenciados através do Store são salvos em disco e restaurados automaticamente no reinício do frpc. Eles funcionam junto com proxies definidos no arquivo de configuração — as entradas do Store têm precedência quando há conflito de nomes.

Monitor

Quando o servidor web está habilitado, o frps salvará os dados do monitor em cache por 7 dias. Eles serão limpos após o reinício do processo.

O Prometheus também é suportado.

Prometheus

Habilite o dashboard primeiro, depois configure enablePrometheus = true em frps.toml.

http://{dashboard_addr}/metrics fornecerá os dados de monitoramento do Prometheus.

Autenticando o Cliente

Existem 2 métodos de autenticação para autenticar o frpc com o frps.

Você pode decidir qual usar configurando auth.method em frpc.toml e frps.toml; o padrão é token.

Configurar auth.additionalScopes = ["HeartBeats"] usará o método de autenticação configurado para adicionar e validar a autenticação em cada heartbeat entre o frpc e o frps.

Configurar auth.additionalScopes = ["NewWorkConns"] fará o mesmo para cada nova conexão de trabalho entre o frpc e o frps.

Autenticação por Token

Ao especificar auth.method = "token" em frpc.toml e frps.toml — a autenticação baseada em token será usada.

Certifique-se de especificar o mesmo auth.token em frps.toml e frpc.toml para que o frpc passe na validação do frps.

Fonte do Token

O frp suporta a leitura de tokens de autenticação de fontes externas usando a configuração tokenSource. Atualmente, a fonte de token baseada em arquivo é suportada.

Fonte de token baseada em arquivo:```toml

frpc.toml

auth.method = "token" auth.tokenSource.type = "file" auth.tokenSource.file.path = "/path/to/token/file"

root@kitploit:~
O token será lido do arquivo especificado na inicialização. Isso é útil para cenários em que os tokens são gerenciados por sistemas externos ou precisam ser mantidos separados dos arquivos de configuração por motivos de segurança.

#### Autenticação OIDC

Ao especificar `auth.method = "oidc"` em `frpc.toml` e `frps.toml` - a autenticação baseada em OIDC será utilizada.

OIDC significa OpenID Connect, e o fluxo utilizado é chamado de [Client Credentials Grant](https://tools.ietf.org/html/rfc6749#section-4.4).

Para usar este tipo de autenticação - configure `frpc.toml` e `frps.toml` da seguinte forma:```toml
# frps.toml
auth.method = "oidc"
auth.oidc.issuer = "https://example-oidc-issuer.com/"
auth.oidc.audience = "https://oidc-audience.com/.default"

Aqui está a tradução do conteúdo:

root@kitploit:~
## Instalação

### Requisitos

- Python 3.8 ou superior
- pip (gerenciador de pacotes do Python)
- Acesso à internet para baixar dependências

### Passos de Instalação

1. Clone o repositório:
   ```bash
   git clone https://github.com/example/tool.git
   cd tool
  1. Instale as dependências:

    root@kitploit:~
    pip install -r requirements.txt
    
  2. Verifique a instalação:

    root@kitploit:~
    python tool.py --help
    

Configuração

Após a instalação, você precisa configurar o arquivo config.yaml com suas credenciais e preferências. O arquivo de configuração padrão inclui:

root@kitploit:~
# Configuração padrão
api_key: "SUA_CHAVE_API_AQUI"
timeout: 30
verbose: false

Uso Básico

Para executar a ferramenta com as configurações padrão:

root@kitploit:~
python tool.py scan --target example.com

Para opções avançadas, consulte a documentação completa na seção Uso Avançado.

root@kitploit:~
# frpc.toml
auth.method = "oidc"
auth.oidc.clientID = "98692467-37de-409a-9fac-bb2585826f18" # Replace with OIDC client ID
auth.oidc.clientSecret = "oidc_secret"
auth.oidc.audience = "https://oidc-audience.com/.default"
auth.oidc.tokenEndpointURL = "https://example-oidc-endpoint.com/oauth2/v2.0/token"
```
### Encriptação e Compressão

Os recursos estão desativados por padrão. Você pode ativar a encriptação e/ou a compressão:```toml
# frpc.toml

[[proxies]]
name = "ssh"
type = "tcp"
localPort = 22
remotePort = 6000
transport.useEncryption = true
transport.useCompression = true
```
#### TLS

Desde a v0.50.0, o valor padrão de `transport.tls.enable` e `transport.tls.disableCustomTLSFirstByte` foi alterado para true, e o TLS está habilitado por padrão.

Para multiplexação de portas, o frp envia um primeiro byte `0x17` para estabelecer uma conexão TLS. Isso só tem efeito quando você define `transport.tls.disableCustomTLSFirstByte` como false.

Para **forçar** o `frps` a aceitar apenas conexões TLS - configure `transport.tls.force = true` no `frps.toml`. **Isso é opcional.**

**Configurações de TLS do `frpc`:**```toml
transport.tls.enable = true
transport.tls.certFile = "certificate.crt"
transport.tls.keyFile = "certificate.key"
transport.tls.trustedCaFile = "ca.crt"
```
**Configurações TLS do `frps`:**```toml
transport.tls.force = true
transport.tls.certFile = "certificate.crt"
transport.tls.keyFile = "certificate.key"
transport.tls.trustedCaFile = "ca.crt"
```
Você precisará de **um certificado de CA raiz** e **pelo menos um certificado SSL/TLS**. Ele **pode** ser autoassinado ou regular (como Let's Encrypt ou outro provedor de certificados SSL/TLS).

Se você estiver usando `frp` via endereço IP e não hostname, certifique-se de definir o endereço IP apropriado na área Subject Alternative Name (SAN) ao gerar os certificados SSL/TLS.

Dado um exemplo:

* Prepare o arquivo de configuração do openssl. Ele existe em `/etc/pki/tls/openssl.cnf` no sistema Linux e `/System/Library/OpenSSL/openssl.cnf` no MacOS, e você pode copiá-lo para o caminho atual, como `cp /etc/pki/tls/openssl.cnf ./my-openssl.cnf`. Se não, você pode criá-lo por conta própria, como:```
cat > my-openssl.cnf << EOF
[ ca ]
default_ca = CA_default
[ CA_default ]
x509_extensions = usr_cert
[ req ]
default_bits        = 2048
default_md          = sha256
default_keyfile     = privkey.pem
distinguished_name  = req_distinguished_name
attributes          = req_attributes
x509_extensions     = v3_ca
string_mask         = utf8only
[ req_distinguished_name ]
[ req_attributes ]
[ usr_cert ]
basicConstraints       = CA:FALSE
nsComment              = "OpenSSL Generated Certificate"
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer
[ v3_ca ]
subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints       = CA:true
EOF
```
* compilar certificados CA:```
openssl genrsa -out ca.key 2048
openssl req -x509 -new -nodes -key ca.key -subj "/CN=example.ca.com" -days 5000 -out ca.crt
```
* compilar certificados frps:```
openssl genrsa -out server.key 2048

openssl req -new -sha256 -key server.key \
    -subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=server.com" \
    -reqexts SAN \
    -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:localhost,IP:127.0.0.1,DNS:example.server.com")) \
    -out server.csr

openssl x509 -req -days 365 -sha256 \
	-in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
	-extfile <(printf "subjectAltName=DNS:localhost,IP:127.0.0.1,DNS:example.server.com") \
	-out server.crt
```
* construir certificados frpc:```
openssl genrsa -out client.key 2048
openssl req -new -sha256 -key client.key \
    -subj "/C=XX/ST=DEFAULT/L=DEFAULT/O=DEFAULT/CN=client.com" \
    -reqexts SAN \
    -config <(cat my-openssl.cnf <(printf "\n[SAN]\nsubjectAltName=DNS:client.com,DNS:example.client.com")) \
    -out client.csr

openssl x509 -req -days 365 -sha256 \
    -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
	-extfile <(printf "subjectAltName=DNS:client.com,DNS:example.client.com") \
	-out client.crt
```
### Recarregamento a quente da configuração do frpc

Os campos `webServer` são necessários para habilitar a API HTTP:```toml
# frpc.toml
webServer.addr = "127.0.0.1"
webServer.port = 7400
```
Em seguida, execute o comando `frpc reload -c ./frpc.toml` e aguarde cerca de 10 segundos para que o `frpc` crie, atualize ou remova proxies.

**Observe que os parâmetros globais do cliente não serão modificados, exceto 'start'.**

`start` é uma lista de permissões global avaliada após todas as fontes serem mescladas (arquivo de configuração/include/store).
Se `start` não estiver vazio, qualquer proxy ou visitor não listado ali não será iniciado, incluindo
entradas criadas via Store API.

`start` é mantido principalmente por compatibilidade e geralmente não é recomendado para novas configurações.
Prefira `enabled` por proxy/por visitor e mantenha `start` vazio, a menos que você queira explicitamente esse
comportamento de lista de permissões global.

Você pode executar o comando `frpc verify -c ./frpc.toml` antes de recarregar para verificar se há erros de configuração.

### Obter status do proxy a partir do cliente

Use `frpc status -c ./frpc.toml` para obter o status de todos os proxies. Os campos `webServer` são necessários para habilitar a API HTTP.

### Permitir apenas determinadas portas no servidor

`allowPorts` em `frps.toml` é usado para evitar o abuso de portas:```toml
# frps.toml
allowPorts = [
  { start = 2000, end = 3000 },
  { single = 3001 },
  { single = 3003 },
  { start = 4000, end = 50000 }
]
```
### Reutilização de Portas

`vhostHTTPPort` e `vhostHTTPSPort` no frps podem usar a mesma porta que `bindPort`. O frps detectará o protocolo da conexão e o tratará de forma correspondente.

O que você precisa prestar atenção é que, se quiser configurar `vhostHTTPSPort` e `bindPort` na mesma porta, primeiro é necessário definir `transport.tls.disableCustomTLSFirstByte` como false.

No futuro, gostaríamos de tentar permitir que vários proxies vinculem a mesma porta remota com protocolos diferentes.

### Limite de Largura de Banda

#### Para Cada Proxy```toml
# frpc.toml

[[proxies]]
name = "ssh"
type = "tcp"
localPort = 22
remotePort = 6000
transport.bandwidthLimit = "1MB"
```
Defina `transport.bandwidthLimit` na configuração de cada proxy para habilitar esse recurso. As unidades suportadas são `MB` e `KB`.

Defina `transport.bandwidthLimitMode` como `client` ou `server` para limitar a largura de banda no lado do cliente ou do servidor. O padrão é `client`.

### Multiplexação de Stream TCP

O frp suporta multiplexação de stream TCP desde a v0.10.0, como a Multiplexação HTTP2, caso em que todas as conexões lógicas para o mesmo frpc são multiplexadas na mesma conexão TCP.

Você pode desabilitar esse recurso modificando `frps.toml` e `frpc.toml`:```toml
# frps.toml and frpc.toml, must be same
transport.tcpMux = false
```
### Suporte ao Protocolo KCP

O KCP é um protocolo rápido e confiável que pode alcançar o efeito de transmissão de uma redução da latência média em 30% a 40% e redução do atraso máximo por um fator de três, ao custo de 10% a 20% a mais de largura de banda desperdiçada em comparação com o TCP.

O modo KCP usa UDP como transporte subjacente. Usando KCP no frp:

1. Habilite o KCP no frps:  ```toml
  # frps.toml
  bindPort = 7000
  # Specify a UDP port for KCP.
  kcpBindPort = 7000
  ```
The `kcpBindPort` number can be the same number as `bindPort`, since `bindPort` field specifies a TCP port.

2. Configure `frpc.toml` to use KCP to connect to frps:  ```toml
  # frpc.toml
  serverAddr = "x.x.x.x"
  # Same as the 'kcpBindPort' in frps.toml
  serverPort = 7000
  transport.protocol = "kcp"
  ```
### Suporte ao Protocolo QUIC

QUIC é um novo transporte multiplexado construído sobre UDP.

Usando QUIC no frp:

1. Habilite o QUIC no frps:  ```toml
  # frps.toml
  bindPort = 7000
  # Specify a UDP port for QUIC.
  quicBindPort = 7000
  ```
The `quicBindPort` number can be the same number as `bindPort`, since `bindPort` field specifies a TCP port.

2. Configure `frpc.toml` to use QUIC to connect to frps:  ```toml
  # frpc.toml
  serverAddr = "x.x.x.x"
  # Same as the 'quicBindPort' in frps.toml
  serverPort = 7000
  transport.protocol = "quic"
  ```
### Connection Pooling

Por padrão, o frps cria uma nova conexão frpc para o serviço de backend a cada solicitação do usuário. Com o connection pooling, o frps mantém um certo número de conexões pré-estabelecidas, reduzindo o tempo necessário para estabelecer uma conexão.

Esse recurso é adequado para um grande número de conexões curtas.

1. Configure o limite da contagem do pool que cada proxy pode usar em `frps.toml`:  ```toml
  # frps.toml
  transport.maxPoolCount = 5
  ```
2. Ative e especifique o número do pool de conexões:  ```toml
  # frpc.toml
  transport.poolCount = 1
  ```
### Balanceamento de carga

O balanceamento de carga é suportado por `group`.

Este recurso está disponível apenas para os tipos `tcp`, `http`, `tcpmux` por enquanto.```toml
# frpc.toml

[[proxies]]
name = "test1"
type = "tcp"
localPort = 8080
remotePort = 80
loadBalancer.group = "web"
loadBalancer.groupKey = "123"

[[proxies]]
name = "test2"
type = "tcp"
localPort = 8081
remotePort = 80
loadBalancer.group = "web"
loadBalancer.groupKey = "123"
```
`loadBalancer.groupKey` é usado para autenticação.

Conexões à porta 80 serão distribuídas aleatoriamente para proxies no mesmo grupo.

Para o tipo `tcp`, `remotePort` no mesmo grupo deve ser o mesmo.

Para o tipo `http`, `customDomains`, `subdomain`, `locations` devem ser os mesmos.

### Verificação de Saúde do Serviço

O recurso de verificação de saúde pode ajudá-lo a alcançar alta disponibilidade com balanceamento de carga.

Adicione `healthCheck.type = "tcp"` ou `healthCheck.type = "http"` para habilitar a verificação de saúde.

Com o tipo de verificação de saúde **tcp**, a porta do serviço será verificada (TCPing):```toml
# frpc.toml

[[proxies]]
name = "test1"
type = "tcp"
localPort = 22
remotePort = 6000
# Enable TCP health check
healthCheck.type = "tcp"
# TCPing timeout seconds
healthCheck.timeoutSeconds = 3
# If health check failed 3 times in a row, the proxy will be removed from frps
healthCheck.maxFailed = 3
# A health check every 10 seconds
healthCheck.intervalSeconds = 10
```
Com o tipo de verificação de saúde **http**, uma solicitação HTTP será enviada ao serviço e uma resposta HTTP 2xx OK é esperada:```toml
# frpc.toml

[[proxies]]
name = "web"
type = "http"
localIP = "127.0.0.1"
localPort = 80
customDomains = ["test.example.com"]
# Enable HTTP health check
healthCheck.type = "http"
# frpc will send a GET request to '/status'
# and expect an HTTP 2xx OK response
healthCheck.path = "/status"
healthCheck.timeoutSeconds = 3
healthCheck.maxFailed = 3
healthCheck.intervalSeconds = 10
```
### Reescrita do Cabeçalho HTTP Host

Por padrão, o frp não modifica as solicitações HTTP tuneladas, pois elas são uma cópia byte a byte.

No entanto, falando de servidores web e solicitações HTTP, o seu servidor web pode depender do cabeçalho HTTP `Host` para determinar qual site está sendo acessado. O frp pode reescrever o cabeçalho `Host` ao encaminhar as solicitações HTTP, usando o campo `hostHeaderRewrite`:```toml
# frpc.toml

[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["test.example.com"]
hostHeaderRewrite = "dev.example.com"
```
O pedido HTTP terá o cabeçalho `Host` reescrito para `Host: dev.example.com` quando chegar ao servidor web real, embora o pedido do navegador provavelmente tenha `Host: test.example.com`.

### Definindo outros cabeçalhos HTTP

Semelhante ao `Host`, você pode substituir outros cabeçalhos de solicitação e resposta HTTP com o tipo de proxy `http`.```toml
# frpc.toml

[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["test.example.com"]
hostHeaderRewrite = "dev.example.com"
requestHeaders.set.x-from-where = "frp"
responseHeaders.set.foo = "bar"
```
Neste exemplo, ele definirá o cabeçalho `x-from-where: frp` na requisição HTTP e `foo: bar` na resposta HTTP.

### Obter IP Real

#### HTTP X-Forwarded-For

Este recurso é para proxies `http` ou proxies com os plugins `https2http` e `https2https` habilitados.

Você pode obter o IP real do usuário a partir dos cabeçalhos de requisição HTTP `X-Forwarded-For`.

#### Proxy Protocol

O frp suporta Proxy Protocol para enviar o IP real do usuário aos serviços locais.

Aqui está um exemplo para o serviço https:```toml
# frpc.toml

[[proxies]]
name = "web"
type = "https"
localPort = 443
customDomains = ["test.example.com"]

# now v1 and v2 are supported
transport.proxyProtocolVersion = "v2"
```
Podes ativar o suporte a Proxy Protocol no nginx para expor o IP real do utilizador no cabeçalho HTTP `X-Real-IP` e, em seguida, ler o cabeçalho `X-Real-IP` no teu serviço web para obter o IP real.

### Exigir HTTP Basic Auth (Palavra-passe) para Serviços Web

Qualquer pessoa que consiga adivinhar o URL do teu túnel pode aceder ao teu servidor web local, a menos que o protejas com uma palavra-passe.

Isto aplica HTTP Basic Auth em todos os pedidos com o nome de utilizador e palavra-passe especificados no ficheiro de configuração do frpc.

Só pode ser ativado quando o tipo de proxy é http.```toml
# frpc.toml

[[proxies]]
name = "web"
type = "http"
localPort = 80
customDomains = ["test.example.com"]
httpUser = "abc"
httpPassword = "abc"
```
Visite `http://test.example.com` no navegador e agora você será solicitado a inserir o nome de usuário e a senha.

### Nomes de Subdomínio Personalizados

É conveniente usar a configuração `subdomain` para os tipos http e https quando muitas pessoas compartilham um único servidor frps.```toml
# frps.toml
subDomainHost = "frps.com"
```
Resolva `*.frps.com` para o IP do servidor frps. Isso geralmente é chamado de registro DNS curinga.```toml
# frpc.toml

[[proxies]]
name = "web"
type = "http"
localPort = 80
subdomain = "test"
```
Agora você pode visitar seu serviço web em `test.frps.com`.

Observe que, se `subdomainHost` não estiver vazio, `customDomains` não deve ser um subdomínio de `subdomainHost`.

### Roteamento de URL

O frp suporta o encaminhamento de requisições HTTP para diferentes serviços web de backend por meio do roteamento de URL.

`locations` especifica o prefixo da URL usado para o roteamento. O frps primeiro busca o local de prefixo mais específico fornecido por strings literais, independentemente da ordem listada.```toml
# frpc.toml

[[proxies]]
name = "web01"
type = "http"
localPort = 80
customDomains = ["web.example.com"]
locations = ["/"]

[[proxies]]
name = "web02"
type = "http"
localPort = 81
customDomains = ["web.example.com"]
locations = ["/news", "/about"]
```
Requisições HTTP com prefixo de URL `/news` ou `/about` serão encaminhadas para **web02** e outras requisições para **web01**.

### Multiplexação de Porta TCP

O frp suporta receber sockets TCP direcionados a diferentes proxies em uma única porta no frps, semelhante a `vhostHTTPPort` e `vhostHTTPSPort`.

O único método de multiplexação de porta TCP suportado atualmente é `httpconnect` - túnel HTTP CONNECT.

Ao definir `tcpmuxHTTPConnectPort` para qualquer valor diferente de 0 no frps, o frps escutará nesta porta por requisições HTTP CONNECT.

O host da requisição HTTP CONNECT será usado para corresponder ao proxy no frps. Os hosts de proxy podem ser configurados no frpc configurando `customDomains` e/ou `subdomain` em proxies `tcpmux`, quando `multiplexer = "httpconnect"`.

Por exemplo:```toml
# frps.toml
bindPort = 7000
tcpmuxHTTPConnectPort = 1337
```
```
## 🛡️ Recursos

- **Detecção de malware**: Detecta e bloqueia malware conhecido e desconhecido usando análise heurística e comportamental.
- **Proteção em tempo real**: Monitora o sistema continuamente para detectar e bloquear ameaças em tempo real.
- **Análise de arquivos**: Analisa arquivos em busca de conteúdo malicioso usando múltiplos mecanismos de detecção.
- **Quarentena**: Isola arquivos suspeitos ou infectados para evitar danos adicionais ao sistema.
- **Atualizações automáticas**: Mantém as definições de vírus e o mecanismo de detecção atualizados automaticamente.
- **Relatórios detalhados**: Gera relatórios abrangentes sobre ameaças detectadas e ações tomadas.
- **Interface amigável**: Interface de linha de comando simples e intuitiva para fácil uso.
- **Baixo consumo de recursos**: Projetado para operar com uso mínimo de CPU e memória.
- **Suporte multiplataforma**: Funciona em Windows, macOS e Linux.
- **Código aberto**: Totalmente open-source, permitindo auditoria e personalização.
``````toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000

[[proxies]]
name = "proxy1"
type = "tcpmux"
multiplexer = "httpconnect"
customDomains = ["test1"]
localPort = 80

[[proxies]]
name = "proxy2"
type = "tcpmux"
multiplexer = "httpconnect"
customDomains = ["test2"]
localPort = 8080
```
Na configuração acima - o frps pode ser contactado na porta 1337 com um cabeçalho HTTP CONNECT como:```
CONNECT test1 HTTP/1.1\r\n\r\n
```
e a conexão será roteada para `proxy1`.

### Conectando-se ao frps via PROXY

O frpc pode se conectar ao frps através de proxy se você definir a variável de ambiente do sistema operacional `HTTP_PROXY`, ou se `transport.proxyURL` estiver definido no arquivo frpc.toml.

Isso só funciona quando o protocolo é tcp.```toml
# frpc.toml
serverAddr = "x.x.x.x"
serverPort = 7000
transport.proxyURL = "http://user:[email protected]:8080"
```
### Mapeamento de faixa de portas

*Adicionado na v0.56.0*

Podemos usar a sintaxe de intervalo do template Go combinada com a função integrada `parseNumberRangePair` para realizar o mapeamento de faixa de portas.

O exemplo a seguir, quando executado, criará 8 proxies nomeados `test-6000, test-6001 ... test-6007`, cada um mapeando a porta remota para a porta local.```
{{- range $_, $v := parseNumberRangePair "6000-6006,6007" "6000-6006,6007" }}
[[proxies]]
name = "tcp-{{ $v.First }}"
type = "tcp"
localPort = {{ $v.First }}
remotePort = {{ $v.Second }}
{{- end }}
```
### Plugins do Cliente

O frpc apenas encaminha pedidos para portas TCP ou UDP locais por padrão.

Os plugins são usados para fornecer funcionalidades avançadas. Existem plugins integrados, como `unix_domain_socket`, `http_proxy`, `socks5`, `static_file`, `http2https`, `https2http`, `https2https`, e você pode ver [exemplos de uso](#example-usage).

Usando o plugin **http_proxy**:```toml
# frpc.toml

[[proxies]]
name = "http_proxy"
type = "tcp"
remotePort = 6000
[proxies.plugin]
type = "http_proxy"
httpUser = "abc"
httpPassword = "abc"
```
`httpUser` e `httpPassword` são parâmetros de configuração usados no plugin `http_proxy`.

### Plugins de Gerenciamento do Servidor

Leia o [documento](https://github.com/fatedier/frp/blob/HEAD/doc/server_plugin.md).

Encontre mais plugins em [gofrp/plugin](https://github.com/gofrp/plugin).

### Gateway de Túnel SSH

*adicionado na v0.53.0*

O frp suporta escutar uma porta SSH no lado do frps e alcança o proxy do protocolo TCP através do protocolo SSH -R, sem depender do frpc.```toml
# frps.toml
sshTunnelGateway.bindPort = 2200
```
Quando executar `./frps -c frps.toml`, um arquivo de chave privada chamado `.autogen_ssh_key` será criado automaticamente no diretório de trabalho atual. Este arquivo de chave privada gerado será usado pelo servidor SSH no frps.

Executando o comando```bash
ssh -R :80:127.0.0.1:8080 v0@{frp address} -p 2200 tcp --proxy_name "test-tcp" --remote_port 9090
```
configura um proxy no frps que encaminha o serviço local 8080 para a porta 9090.```bash
frp (via SSH) (Ctrl+C to quit)

User:
ProxyName: test-tcp
Type: tcp
RemoteAddress: :9090
```
Isto é equivalente a:```bash
frpc tcp --proxy_name "test-tcp" --local_ip 127.0.0.1 --local_port 8080 --remote_port 9090
```
Consulte este [documento](https://github.com/fatedier/frp/blob/HEAD/doc/ssh_tunnel_gateway.md) para obter mais informações.

### Rede Virtual (VirtualNet)

*Recurso alfa adicionado na v0.62.0*

O recurso VirtualNet permite que o frp crie e gerencie conexões de rede virtual entre clientes e visitantes por meio de uma interface TUN. Isso possibilita o roteamento em nível de IP entre máquinas, estendendo o frp além do simples encaminhamento de portas para suportar conectividade de rede completa.

Para informações detalhadas sobre configuração e uso, consulte a [documentação do VirtualNet](https://github.com/fatedier/frp/blob/HEAD/doc/virtual_net.md).

## Feature Gates

O frp suporta feature gates para habilitar ou desabilitar recursos experimentais. Isso permite que os usuários testem novos recursos antes de serem considerados estáveis.

### Feature Gates Disponíveis

| Nome | Estágio | Padrão | Descrição |
|------|---------|--------|-----------|
| VirtualNet | ALPHA | false | Capacidades de rede virtual para o frp |

### Habilitando Feature Gates

Para habilitar um recurso experimental, adicione o feature gate à sua configuração:```toml
featureGates = { VirtualNet = true }
```
### Ciclo de Vida de Funcionalidades

As funcionalidades normalmente passam por três estágios:
1. **ALPHA**: Desativadas por padrão, podem ser instáveis
2. **BETA**: Podem ser ativadas por padrão, mais estáveis, mas ainda em evolução
3. **GA (Disponibilidade Geral)**: Ativadas por padrão, prontas para uso em produção

## Projetos Relacionados

* [gofrp/plugin](https://github.com/gofrp/plugin) - Um repositório para plugins do frp que contém uma variedade de plugins implementados com base no mecanismo de extensão do frp, atendendo às necessidades de personalização de diferentes cenários.
* [gofrp/tiny-frpc](https://github.com/gofrp/tiny-frpc) - Uma versão leve do cliente frp (cerca de 3,5MB no mínimo) implementada usando o protocolo ssh, suportando alguns dos recursos mais comumente usados, adequada para dispositivos com recursos limitados.

## Contribuindo

Interessado em participar? Nós gostaríamos de ajudar você!

* Dê uma olhada na nossa [lista de issues](https://github.com/fatedier/frp/issues) e considere enviar um Pull Request para o **branch dev**.
* Se você quiser adicionar um novo recurso, crie uma issue primeiro para descrever o novo recurso, bem como a abordagem de implementação. Uma vez que a proposta for aceita, crie uma implementação dos novos recursos e envie-a como um pull request.
* Desculpe pelo meu inglês ruim. Melhorias para este documento são bem-vindas, até mesmo correções de erros de digitação.
* Se você tiver ótimas ideias, envie um e-mail para [email protected].

**Nota: Preferimos que você dê sua opinião em [issues](https://github.com/fatedier/frp/issues), para que outros com a mesma dúvida possam pesquisar rapidamente e não precisemos responder repetidamente.**

## Doação

Se o frp ajuda você muito, você pode nos apoiar por:

### Patrocinadores do GitHub

Apoie-nos por meio do [Github Sponsors](https://github.com/sponsors/fatedier).

Você pode ter o logotipo da sua empresa colocado no arquivo README deste projeto.

### PayPal

Doe dinheiro por meio do [PayPal](https://www.paypal.me/fatedier) para a minha conta **[email protected]**.
Baixar ferramenta