Этот проект поддерживается спонсорами GitHub.
croc - это инструмент, который позволяет любым двум компьютерам просто и надежно передавать файлы и папки. AFAIK, Croc -единственный инструмент передачи файлов CLI, который выполняет все следующее:
Позволяет любым двум компьютерам передавать данные (с помощью реле)
обеспечивает сквозное шифрование (с использованием pake)
Включает простые кроссплатформенные передачи (Windows, Linux, Mac)
позволяет несколько файловых передач
Позволяет возобновить прерывание
локальный сервер или порт-переход не требуется
IPv6-первое с IPv4 Swarkback
может использовать прокси , как Tor
Для получения дополнительной информации о croc . В моем блоге или прочитайте недавнее интервью, которое я сделал.

Загрузите последний выпуск для вашей системы или установите релиз из командной строки:
curl https://getcroc.schollz.com | bash
В MacOS вы можете установить последний релиз с HomeBrew:
brew install croc
В MacOS вы также можете установить последний релиз с MacPorts:
sudo port selfupdate sudo port install croc
В Windows вы можете установить последний релиз с совками, шоколадом или Winget:
scoop install croc
choco install croc
winget install schollz.croc
На UNIX вы можете установить последний релиз с NIX:
nix-env -i croc
На Alpine Linux вы должны сначала установить зависимости:
apk add bash coreutils wget -qO- https://getcroc.schollz.com | bash
На Arch Linux вы можете установить последний релиз с pacman :
pacman -S croc
На Fedora вы можете установить с помощью dnf :
dnf install croc
На Gentoo вы можете установить с portage :
emerge net-misc/croc
На термине вы можете установить с pkg :
pkg install croc
На FreeBSD вы можете установить с pkg :
pkg install croc
На Linux, MacOS и Windows вы можете установить из Conda-Forge во всем мире с pixi :
pixi global install croc
или в конкретную среду с conda :
conda install --channel conda-forge croc
Или вы можете установить Go и построить из источника (требуется GO 1.17+):
go install github.com/schollz/croc/v10@latest
На Android есть стороннее приложение F-Droid, доступное для загрузки.
Чтобы отправить файл, просто сделайте:
$ croc send [file(s)-or-folder] Sending 'file-or-folder' (X MB) Code is: code-phrase
Затем, чтобы получить файл (или папку) на другом компьютере, вы можете просто сделать
croc code-phrase
Кодовая фраза используется для создания соглашения с ключевым соглашением, выплаченным паролем (PAKE), которое генерирует секретный ключ для отправителя и получателя для использования для сквозного шифрования.
Существует ряд настраиваемых параметров (см. --help ). Набор параметров (например, пользовательский реле, порты и кодовая фраза) может быть установлен с использованием --remember .
croc на Linux или Mac OS На Linux и Mac OS отправка и прием немного отличаются, чтобы избежать утечки секрета с помощью имени процесса. В этих системах вам нужно будет запускать croc с секретом в качестве переменной среды. Например, чтобы получить с секретом *** :
CROC_SECRET=*** croc
Это покажет только croc в списке процессов многопользовательской системы и не утечет секрет.
Для системы с одним пользователем поведение по умолчанию может быть навсегда включено при запуске
croc --classic
и подтверждая. Запустите эту команду еще раз, чтобы отключить классический режим.
Вы можете отправить с собственной кодовой фразой (должно быть более 6 символов).
croc send --code [code-phrase] [file(s)-or-folder]
По умолчанию CROC будет запрашивать, перезаписать ли файл. Вы можете автоматически перезаписать файлы, используя флаг --overwrite (только получатель). Например, получите файл для автоматического перезаписи:
croc --yes --overwrite <code>
Вы можете трубы в croc :
cat [filename] | croc send
В этом случае croc автоматически будет использовать данные Stdin и отправлять и назначить имя файла, подобное «Croc-stdin-123456789». Чтобы принять в stdout , вы всегда можете просто использовать --yes , автоматически одобрит передачу и подключите ее к stdout .
croc --yes [code-phrase] > out
Весь другой текст, напечатанный в консоли, будет в stderr поэтому он не мешает сообщению, которое отправится в stdout .
Иногда вы хотите отправить URL -адреса или короткий текст. В дополнение к трубопроводам, вы можете легко отправить текст с croc :
croc send --text "hello world"
Это автоматически сообщит приемнику использовать stdout , когда они получат текст, поэтому он будет отображаться.
Вы можете использовать прокси в качестве подключения к реле, добавив прокси -адрес с помощью --socks5 . Например, вы можете отправить через реле Tor:
croc --socks5 "127.0.0.1:9050" send SOMEFILE
Вы можете выбрать из нескольких различных эллиптических кривых, которые можно использовать для шифрования, используя флаг --curve . Только получатель может выбрать кривую. Например, получите файл, используя кривую P-521:
croc --curve p521 <codephrase>
Доступными кривыми являются P-256, P-348, P-521 и SIEC. P-256-кривая по умолчанию.
Вы можете выбрать из нескольких разных алгоритмов хэш. По умолчанию - алгоритм xxhash , который быстрый и тщательный. Если вы хотите оптимизировать для скорости, вы можете использовать алгоритм imohash , который даже быстрее, но, поскольку он вызывает файлы (в отличие от всего файла), он может ошибочно определить, что файл одинаков для двух передачи компьютеров - хотя это только Проблема, если вы синхронизируете файлы по сравнению с отправкой нового файла на компьютер.
croc send --hash imohash SOMEFILE
Реле необходимо, чтобы скрепить параллельные входящие и исходящие соединения. По умолчанию croc использует публичную реле, но вы также можете запустить свою собственную реле:
croc relay
По умолчанию он использует порты TCP 9009-9013. Обязательно откройте их. Вы можете настроить порты (например, croc relay --ports 1111,1112 ), но вы должны иметь минимум 2 порта для реле. Первый порт предназначен для связи, а последующие порты используются для мультиплексной передачи данных.
Вы можете отправлять файлы, используя ваш реле, введя --relay , чтобы изменить реле, которое вы используете, если хотите, чтобы собеседовать с собственным.
croc --relay "myrelay.example.com:9009" send [filename]
Обратите внимание, что при отправке вам нужно только включить первый порт (порт связи). Последующие порты для передачи данных будут переданы обратно пользователю от реле.
Если это проще, вы также можете запустить реле с Docker:
docker run -d -p 9009-9013:9009-9013 -e CROC_PASS='YOURPASSWORD' schollz/croc
Обязательно включите пароль для реле, иначе любые запросы будут отклонены.
croc --pass YOURPASSWORD --relay "myreal.example.com:9009" send [filename]
Примечание. При включении --pass YOURPASSWORD вы можете вместо этого передать файл с паролем, например, --pass FILEWITHPASSWORD .
Грань
croc прошел много итераций, и я в восторге от всех великих вкладов! Если вам хочется внести свой вклад, во что бы то ни стало, вы можете отправить проблему, пиар или задать вопрос.
Спасибо @Warner за идею, @tscholl2 за Ginsts Gist, @skorokithakis за код по оказанию двух соединений. Наконец-то спасибо, что сделали запросы на развлечение @maximbaz, @meyermarcel, @girbons, @techtide, @heymatthew, @lunsford94, @lummie, @jesuiscamille, @threefjord, @marcossegovia, @csleong98, @afotescu, @callmefever, @ @ @ @ @ @ @ @ @ @ @ @ @ @@callmefeaw, @ @anatolyyyyyy, @goggle, @smileboywtu, @nicolashardy, @fbartels, @rkuprov, @hreese, @xenrox и ipar!