Este projeto é suportado pelos patrocinadores do GitHub.
croc é uma ferramenta que permite que dois computadores transfiram de maneira simples e com segurança. AFAIK, CROC é a única ferramenta de transferência de arquivos da CLI que faz todos os seguintes:
Permite que todos os dois computadores transfiram dados (usando um relé)
Fornece criptografia de ponta a ponta (usando o PAKE)
Ativa transferências fáceis de plataforma cruzada (Windows, Linux, Mac)
Permite várias transferências de arquivos
permite a retomada de transferências que são interrompidas
servidor local ou encaminhamento de porta não é necessário
IPv6-primeiro com fallback IPv4
pode usar proxy , como tor
Para mais informações sobre croc , consulte minha postagem no blog ou leia uma entrevista recente que fiz.

Faça o download do lançamento mais recente do seu sistema ou instale uma versão da linha de comando:
curl https://getcroc.schollz.com | bash
No MacOS, você pode instalar o lançamento mais recente com o Homebrew:
brew install croc
No MacOS, você também pode instalar o lançamento mais recente com o Macports:
sudo port selfupdate sudo port install croc
No Windows, você pode instalar o lançamento mais recente com SCOOP, Chocolatey ou Winget:
scoop install croc
choco install croc
winget install schollz.croc
No Unix, você pode instalar o lançamento mais recente com o NIX:
nix-env -i croc
No Alpine Linux, você deve instalar dependências primeiro:
apk add bash coreutils wget -qO- https://getcroc.schollz.com | bash
No Arch Linux, você pode instalar o lançamento mais recente com pacman :
pacman -S croc
No Fedora, você pode instalar com dnf :
dnf install croc
No Gentoo, você pode instalar com portage :
emerge net-misc/croc
No Termux, você pode instalar com pkg :
pkg install croc
No FreeBSD, você pode instalar com pkg :
pkg install croc
No Linux, MacOS e Windows, você pode instalar de Conda-Forge globalmente com pixi :
pixi global install croc
ou em um determinado ambiente com conda :
conda install --channel conda-forge croc
Ou você pode instalar o Go e a construção da fonte (requer go 1.17+):
go install github.com/schollz/croc/v10@latest
No Android, há um aplicativo F-DROID de terceiros disponíveis para download.
Para enviar um arquivo, basta fazer:
$ croc send [file(s)-or-folder] Sending 'file-or-folder' (X MB) Code is: code-phrase
Então, para receber o arquivo (ou pasta) em outro computador, você pode simplesmente fazer
croc code-phrase
A frase de código é usada para estabelecer o contrato-chave autenticado por senha (PAKE), que gera uma chave secreta para o remetente e o destinatário usar para a criptografia de ponta a ponta.
Existem várias opções configuráveis (consulte --help ). Um conjunto de opções (como relé personalizado, portas e frase de código) pode ser definido usando --remember .
croc no Linux ou Mac OS No Linux e Mac OS, o envio e o recebimento é um pouco diferente para evitar vazar o segredo através do nome do processo. Nesses sistemas, você precisará executar croc com o segredo como uma variável de ambiente. Por exemplo, para receber com o segredo *** :
CROC_SECRET=*** croc
Isso mostrará apenas croc na lista de processos de um sistema multiusuário e não vazará o segredo.
Para um sistema de usuário único, o comportamento padrão pode ser habilitado permanentemente executando
croc --classic
e confirmando. Execute este comando novamente para desativar o modo clássico.
Você pode enviar com sua própria frase de código (deve ter mais de 6 caracteres).
croc send --code [code-phrase] [file(s)-or-folder]
Por padrão, o CROC solicitará se deve substituir um arquivo. Você pode substituir automaticamente os arquivos usando o sinalizador --overwrite (somente destinatário). Por exemplo, receba um arquivo para substituir automaticamente:
croc --yes --overwrite <code>
Você pode tubar -se para croc :
cat [filename] | croc send
Nesse caso, croc usará automaticamente os dados do STDIN e enviará e atribuirá um nome de arquivo como "Croc-stdin-123456789". Para receber para o stdout , você sempre pode usar o --yes aprovará automaticamente a transferência e o transferência para stdout .
croc --yes [code-phrase] > out
Todo o outro texto impresso no console está indo para o stderr , para que não interfira na mensagem que vai para stdout .
Às vezes você deseja enviar URLs ou texto curto. Além da tubulação, você pode enviar um texto facilmente com croc :
croc send --text "hello world"
Isso dirá automaticamente ao receptor que use stdout quando receber o texto para que ele seja exibido.
Você pode usar um proxy como sua conexão com o relé adicionando um endereço de proxy com --socks5 . Por exemplo, você pode enviar através de um relé do Tor:
croc --socks5 "127.0.0.1:9050" send SOMEFILE
Você pode escolher entre várias curvas elípticas diferentes para usar para criptografia usando o sinalizador --curve . Somente o destinatário pode escolher a curva. Por exemplo, receba um arquivo usando a curva P-521:
croc --curve p521 <codephrase>
As curvas disponíveis são P-256, P-348, P-521 e SIEC. P-256 é a curva padrão.
Você pode escolher entre vários algoritmos de hash diferentes. O padrão é o algoritmo xxhash que é rápido e completo. Se você deseja otimizar a velocidade, pode usar o algoritmo imohash , que é ainda mais rápido, mas como ele amostra arquivos (versus ler o arquivo inteiro), pode determinar erroneamente que um arquivo é o mesmo nos dois computadores transferindo - embora isso seja apenas Um problema se você estiver sincronizando arquivos versus enviar um novo arquivo para um computador.
croc send --hash imohash SOMEFILE
O relé é necessário para grampear as conexões paralelas de entrada e saída. Por padrão, croc usa um revezamento público, mas você também pode executar seu próprio revezamento:
croc relay
Por padrão, ele usa portas TCP 9009-9013. Certifique -se de abri -los. Você pode personalizar as portas (por exemplo, croc relay --ports 1111,1112 ), mas você deve ter um mínimo de 2 portas para o relé. A primeira porta é para comunicação e as portas subsequentes são usadas para a transferência de dados multiplexada.
Você pode enviar arquivos usando seu relé digitando --relay para alterar o relé que você está usando se desejar um host personalizado.
croc --relay "myrelay.example.com:9009" send [filename]
Observe que, ao enviar, você só precisa incluir a primeira porta (a porta de comunicação). As portas subsequentes para transferência de dados serão transmitidas de volta ao usuário a partir do relé.
Se for mais fácil, você também pode executar um relé com o Docker:
docker run -d -p 9009-9013:9009-9013 -e CROC_PASS='YOURPASSWORD' schollz/croc
Certifique -se de incluir a senha do relé, caso contrário, quaisquer solicitações serão rejeitadas.
croc --pass YOURPASSWORD --relay "myreal.example.com:9009" send [filename]
NOTA: Ao incluir --pass YOURPASSWORD você pode passar um arquivo com a senha, por exemplo --pass FILEWITHPASSWORD .
Mit
croc passou por muitas iterações e estou impressionado com todas as grandes contribuições! Se você quiser contribuir, de alguma forma, de todos os meios, pode enviar um problema, um PR ou fazer uma pergunta.
Obrigado @warner pela idéia, @tscholl2 pelos gists de criptografia, @skorokithakis para código na proxying duas conexões. Finalmente, obrigado por fazer solicitações de puxar @maximbaz, @MeyerMarcel, @Girbons, @Techtide, @heymatthew, @lunsford94, @lummie, @jesuiscamille, @Threefjord, @MarCosSegovia, @CSleong98, @AfotScU, @MarcosSeGovia, @CSLEONG98, @AFOTESCU, @anatolyyyyyy, @goggle, @smileboywtu, @nicolashardy, @fbartels, @rkuprov, @hreese, @xenrox e ipar!