Gửi tệp qua netcat


23

Tôi đang sử dụng một cái gì đó như thế này để gửi tệp từ máy tính này sang máy tính khác:

Để phục vụ tệp (trên máy tính A):

cat something.zip | nc -l -p 1234

Để nhận tệp (trên máy tính B):

netcat server.ip.here. 1234 > something.zip

Câu hỏi của tôi là ... tôi có thể làm ngược lại không? Giả sử tôi có tệp trên máy tính B và tôi muốn gửi nó đến A nhưng không phải như cách tôi đã viết ở trên, nhưng bằng cách làm cho máy tính được nhận tệp (A) trở thành máy chủ 'nghe' và kết nối máy tính 'gửi' tệp ( B) đến máy chủ và gửi tập tin? Có thể không? Tôi nghĩ rằng nó có thể được nhưng tôi không chắc làm thế nào để làm điều này.

Trong trường hợp lời giải thích trên của tôi bị rối tung: Làm cách nào để gửi tệp tới 'máy chủ' thay vì phục vụ tệp trên máy chủ và sau đó lấy nó TỪ nó (như tôi đã làm ở trên)?


Lưu ý: nếu bạn đang sử dụng ncscpquá chậm và bạn không cần mã hóa, bạn có thể muốn chuyển sang udpcast: superuser.com/questions/692294/ hiệu
unhammer

Câu trả lời:


37

Trên máy chủ của bạn (A):

nc -l -p 1234 -q 1> gì đó.zip </ dev / null
Trên "khách hàng người gửi" (B) của bạn:
mèo gì đó.zip | máy chủ netcat.ip.here 1234


Vâng, tôi nghĩ rằng tôi sẽ phải đổi bên bằng cách nào đó nhưng tôi không chắc làm thế nào :). Cảm ơn, nó hoạt động!
Phil

Đó là một mẹo netcat dễ thương.
DaveParillo

2
Tại sao là < /dev/nullmột phần?
törzsmókus

7
Bởi vì netcat vừa đọc stdin và viết stdout đồng thời, gửi bất cứ thứ gì đọc từ stdin ra mạng và in bất cứ thứ gì nhận được từ mạng trên thiết bị xuất chuẩn. </ Dev / null đảm bảo rằng, khi tệp đã nhận hoàn tất, netcat không ngồi đó chờ đợi vô thời hạn đầu vào từ bảng điều khiển (dù sao nó cũng không nên đọc!) Và cũng đảm bảo rằng nó không bị ngấu nghiến bất kỳ đầu vào nào có thể có sẵn từ thiết bị đầu cuối, chẳng hạn như bạn gõ lệnh tiếp theo bạn muốn chạy.
martinwguy

4
nếu bạn có pv, tôi khuyên bạn nên vận hành "máy khách máy chủ" vì pv soemthing.zip | ...nó sẽ hiển thị tiến trình của tệp đọc đi vào đường ống.
ThorSummoner

5

Lưu ý, nếu bạn cũng muốn duy trì quyền truy cập tệp, quyền sở hữu và dấu thời gian, chúng tôi sử dụng tar với netcat để thực hiện chuyển các thư mục và tệp.

Trên hệ thống nhận:

nc -l -p 12345 -q 1 | tar xz -C /path/to/root/of/tree

Từ hệ thống gửi:

tar czf - ./directory_tree_to_xfer | nc <host name or IP address of receiving system> 12345 

Mong rằng sẽ giúp.


1
Tốt bổ sung cho câu trả lời, nhưng xin vui lòng để lại như một nhận xét và không phải là một câu trả lời riêng biệt.
bất cứ lúc nào

2
Không thể thêm nhận xét ở trên do thiếu điểm Rep trên bảng phụ này, vì vậy tôi phải đưa ra câu trả lời, mặc dù rõ ràng, bạn được phép nhận xét về câu trả lời của chính mình.
B.Kaatz

2

Máy tính A: nc -l -p 1234 > filename.txt

Máy tính B: nc server.com 1234 < filename.txt

Nên làm việc quá;)


0

Bắt đầu một phiên bản khác của netcat trên máy tính B. Chỉ cần làm những gì bạn đã làm trên máy tính A, nhưng phục vụ nó từ B. Cung cấp cho máy chủ mới một cổng mới.


Tôi không muốn làm điều tương tự, tôi muốn thay đổi các lệnh thành một thứ khác (tôi không chắc là nó có thể không) ... nhìn vào văn bản in đậm trong câu hỏi của tôi. Ý tôi là tôi không muốn phục vụ từ B. Tôi muốn A là máy chủ lắng nghe đầu vào ... và sau đó tôi muốn gửi nội dung tệp từ B không nghe để nghe A.
Phil

Đó không phải là cách netcat hoạt động.
DaveParillo

1
Như bạn có thể thấy từ câu trả lời được chấp nhận - vâng, đó là cách netcat cũng có thể hoạt động.
Phil

Bạn đúng. Tôi học được điều gì đó mới mỗi ngày!
DaveParillo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.