Gửi nội dung tệp văn bản đến máy chủ bằng netcat?


13

Có một quá trình daemon lắng nghe trên cổng 5144, mà tôi không thể sửa đổi.

Tôi muốn sử dụng netcat để gửi nội dung của tệp văn bản đến máy chủ, nhưng điều này gây ra netcatviệc treo thiết bị đầu cuối cho đến khi tôi nhấn Ctrl+ C:

cat file.txt | nc -u 127.0.0.1 5144

Cách duy nhất tôi có thể làm cho nó hoạt động là chạy nc -u 127.0.0.1 5144và sao chép / dán nội dung của tệp theo cách thủ công.

Có ý kiến ​​gì không?


Cũng lưu ý:

  1. cat file.txt | ...dẫn đến bash: ...: command not foundvà tôi có thể tiếp tục sử dụng thiết bị đầu cuối
  2. sử dụng nc -u 127.0.0.1 5144 < file.txtdẫn đến hành vi tương tự như sử dụng | ở trên

Điều gì xảy ra khi bạn nói cat file.txt | …? Thế còn nc -u 127.0.0.1 5144 < file.txt?
Scott

bạn có cần sử dụng -u không? Ngoài ra, bạn đã thử cho phía bên kia, nc -l -p? và bạn đã thử nc -p chưa? (có một nc sử dụng -l -p và một tôi nghĩ rằng sử dụng -p mà không có -l). Bạn chỉ hiển thị một bên, khách hàng / bên bắt đầu. Bạn đang làm gì cho phía máy chủ? Thử làm bài kiểm tra, làm cho nc nghe trên cổng 1234 và xem mèo ... | nc ... hoạt động với nó. Tôi chưa bao giờ nhìn thấy nó trước đây, vì vậy đây có thể là một điểm yếu, nhưng có lẽ nó là một thứ gì đó đặc biệt với loại daemon đặc biệt này không chấp nhận những thứ bị nhét.
barlop

Tôi không thể sửa đổi daemon. @Scott: bash: ...: command not foundvà sử dụng "<file.txt" giống như | toán tử (netcat chỉ bị treo)
Amil

Bạn có thể vui lòng chính xác hơn? Nó có nói là trực tiếp bash: ...: command not foundkhông? Hay nó nói “ bash: cat: command not found” hoặc “ bash: nc: command not found”? Và sau đó nó thoát ra một dấu nhắc shell, hay nó bị treo? (Tôi khuyên bạn nên chỉnh sửa các câu hỏi thêm những chi tiết này, để mọi người ở Úc đang chỉ là bây giờ thức dậy không cần phải đọc qua tất cả những ý kiến để tìm ra những triệu chứng của bạn.)
Scott

@Scott: Cảm ơn, tôi đã tích hợp câu trả lời của mình cho câu hỏi của bạn vào câu hỏi ban đầu. Có ý kiến ​​gì không?
Amil

Câu trả lời:


7

Nếu bạn đang sử dụng phiên bản GNU của netcat thì bạn có thể sử dụng cờ -c để đóng kết nối trên EOF.

-c, - đóng kết nối chặt chẽ trên EOF từ stdin

Nếu bạn đang sử dụng phiên bản gốc của công cụ thì bạn có thể sử dụng cờ -q.

-q giây thoát sau EOF trên stdin và độ trễ của giây

Một ví dụ cho phiên bản gốc là:

cat file.txt | nc -u -q 0 127.0.0.1 5144

Tôi đã thêm "-q 0" vào lệnh ban đầu của bạn. Điều này sẽ đóng kết nối sau khi tập tin đã được gửi.


Để phân biệt: phiên bản gốc là phiên bản yêu cầu chỉ định -l -p <port>để nghe. Phiên bản GNU chỉ mất -l <port>.
tueftl

1

Giả sử rằng sau khi gửi kết nối EOF sẽ ở trạng thái chờ, bạn có thể sử dụng -w timeouttùy chọn, hoạt động với giá trị timeoutbằng 0 (không giống như -qtùy chọn ngu ngốc ...)

cat file.text | nc -u localhost 4300 -w0

0

Nếu bạn đang chuyển từ FreeBSD sang Windows:

FreeBSD: cat file.txt | nc -N 10.0.0.5 5144

-N sẽ tắt ổ cắm mạng sau EOF

Các cửa sổ: nc -l -p 5144 > output.txt

-lsẽ ngừng nghe khi kết nối đóng (không giống như -L)

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.