2011-06-27 14 views
5

Tôi có cổng netcat nghe trên cổng 1501 và tôi muốn đường dẫn đầu vào đã nhận trên cổng đó đến cửa sổ đầu cuối mới. Tôi biết đây là một ý tưởng tồi bởi vì về cơ bản bất cứ ai trên cổng đó đều có thể điều khiển máy nhưng tôi muốn tìm hiểu xem nó có thể làm được không. Bất cứ ai biết làm thế nào. Tôi đã thử điều này cho đến nay.Thiết bị đầu cuối Bash Chuyển hướng đến một Thiết bị đầu cuối khác

nc -l 1500 | xterm hoặc nc -l 1500 | xterm -e "NAMEOFWINDOW"

cũng đã thử chuyển hướng đến gnome-terminal theo cách đơn giản. Tôi có thể làm

nc -l 1500 | grep "SOMEKEYWORD" thành công.

Bất kỳ ý tưởng nào? -TJ

Trả lời

1

Điều này là không thể theo cách này, vì xterm không chấp nhận đầu vào trên stdin, nó sẽ nhập trực tiếp bàn phím.

Có hai lựa chọn:

  • sử dụng bash thay vì xterm: nc -l 1500 | bash trong một xterm
  • tùy chọn -S dụng xterm s, nhưng bạn cần phải đính kèm các netcat để một tty giả trước, một sau đó đính kèm xterm vào thiết bị đầu cuối giả
2

Bạn có hai vấn đề. Đầu tiên là xtermgnome-terminal không phải là chương trình cung cấp lời nhắc và chấp nhận lệnh - chúng chỉ là cách kết nối bàn phím và màn hình của bạn với chương trình đó, là vỏ của bạn (thường là /bin/bash). Vì vậy, nó thực sự là bash mà bạn muốn kết nối với netcat.

Thứ hai, bạn cần nhiều hơn một ống một chiều, đó là những gì bạn nhận được với |. Nếu bạn sử dụng:

nc -l -p 1500 | /bin/bash 

sau đó bạn sẽ chỉ có một ống từ người dùng -bash - họ sẽ có thể cung cấp cho đầu vào, nhưng sẽ không thấy bất kỳ đầu ra. Ngoài ra, nếu bạn làm:

/bin/bash | nc -l -p 1500 

sau đó ngược lại sẽ được áp dụng - bạn sẽ chỉ có một ống - người dùng từbash. Người dùng sẽ thấy đầu ra từ bash, nhưng sẽ không thể cung cấp bất kỳ đầu vào nào.

May mắn thay, netcat hỗ trợ một tùy chọn để tạo ra một ống hai chiều (trên thực tế, hai ống) để lệnh khác:

nc -l -p 1500 -e /bin/bash 

này sẽ làm những gì bạn muốn - nhưng lưu ý rằng bash sẽ không hiển thị một dấu nhắc, vì nó sẽ chạy ở chế độ "không tương tác".

Ồ, và một điều nữa - vâng, đây là một ý tưởng tồi thực sự là.

+0

Lol Tôi biết nó là một ý tưởng ngu ngốc hơn vì lợi ích của nó có thể được thực hiện. Cảm ơn phản hồi tuyệt vời btw. Chi tiết giải thích tuyệt vời tổng thể :) công việc tốt. –

+0

Thực ra đã cố gắng này ngay bây giờ. -e không phải là một chuyển đổi được công nhận Im sử dụng ubuntu si nó phiên bản của tôi netcat hoặc am i thiếu cái gì? –

+0

@TJ Pavlu: Oh yeah, theo mặc định Ubuntu cài đặt một netcat gimped, bạn cần gói 'netcat-traditional', cung cấp' nc.traditional'. – caf

0

Bạn có thể sử dụng tee để chuyển hướng đầu ra sang tệp tạm thời và sau đó tail --follow=name --retry trong một thiết bị đầu cuối khác.

nc -l 1500 | tee /tmp/file.txt 

và tất nhiên:

tail --follow=name --retry /tmp/file.txt 

Bằng cách này bạn có thể làm rm -f /tmp/file.txt qua công việc định kỳ mà không có lệnh tail bị gián đoạn.

+0

Tôi nghĩ bạn đã hiểu nhầm câu hỏi. –