โครงการนี้ได้รับการสนับสนุนโดยผู้สนับสนุน GitHub
croc
เป็นเครื่องมือที่อนุญาตให้คอมพิวเตอร์สองเครื่องสามารถถ่ายโอนไฟล์และโฟลเดอร์ได้อย่างง่ายดายและปลอดภัย AFAIK, CROC เป็นเครื่องมือถ่ายโอนไฟล์ CLI เดียวที่ทำ ทั้งหมด ต่อไปนี้:
อนุญาตให้ คอมพิวเตอร์สองเครื่อง ถ่ายโอนข้อมูล (โดยใช้รีเลย์)
จัดเตรียม การเข้ารหัสแบบ end-to-end (โดยใช้ Pake)
เปิดใช้งานการถ่ายโอน ข้ามแพลตฟอร์ม ได้ง่าย (Windows, Linux, Mac)
อนุญาตให้ถ่ายโอน ไฟล์ได้หลายไฟล์
อนุญาตให้ กลับมาถ่ายโอน ที่ถูกขัดจังหวะ
เซิร์ฟเวอร์ท้องถิ่นหรือการส่งต่อพอร์ต ไม่จำเป็น
IPV6-first พร้อมทางเลือก IPv4
สามารถ ใช้พร็อกซีได้ เช่น TOR
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ croc
ดูโพสต์บล็อกของฉันหรืออ่านบทสัมภาษณ์ล่าสุดที่ฉันทำ
ดาวน์โหลดรุ่นล่าสุดสำหรับระบบของคุณหรือติดตั้งรีลีสจากบรรทัดคำสั่ง:
curl https://getcroc.schollz.com | bash
บน MacOS คุณสามารถติดตั้งรุ่นล่าสุดด้วย Homebrew:
brew install croc
บน MacOS คุณสามารถติดตั้งรีลีสล่าสุดด้วย MacPorts:
sudo port selfupdate sudo port install croc
บน Windows คุณสามารถติดตั้งรีลีสล่าสุดด้วย scoop, chocolatey หรือ 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
ใน Termux คุณสามารถติดตั้งด้วย 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
หรือคุณสามารถติดตั้งไปและสร้างจากแหล่งที่มา (ต้องใช้ 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
Flag (ผู้รับเท่านั้น) ตัวอย่างเช่นรับไฟล์เพื่อเขียนทับโดยอัตโนมัติ:
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 สำหรับการเข้ารหัส Gists, @skorokithakis สำหรับรหัสในการเชื่อมต่อสองรายการ ในที่สุดขอบคุณสำหรับการดึงคำขอ @Maximbaz, @MeyerMarcel, @Girbons, @Techtide, @HeyMatTheW, @lunsford94, @lummie, @Jesuiscamille, @Threefjord, @Marcossegovia, @csleong98, @afotescu @Anatolyyyyyy, @Goggle, @SmileBoywtu, @nicolashardy, @fbartels, @rkuprov, @hreese, @xenrox และ ipar!