2010-03-31 23 views
22

Tôi đang sử dụng netcat làm phần phụ trợ để xẻng dữ liệu qua lại cho một chương trình tôi đang thực hiện. Tôi đã thử nghiệm chương trình của mình trên mạng cục bộ, và một khi nó hoạt động, tôi nghĩ rằng việc chuyển tiếp một cổng từ bộ định tuyến của tôi có thể làm cho chương trình của tôi hoạt động trên internet. Than ôi! Điều này có vẻ không phải là trường hợp.Làm cách nào để nhận được netcat chấp nhận các kết nối từ bên ngoài mạng LAN?

Nếu tôi bắt đầu netcat lắng nghe trên cổng 6666 với:

nc -vv -l -p 6666,

sau đó đi đến 127.0.0.1:6666 trong một trình duyệt, như mong đợi tôi nhìn thấy một yêu cầu HTTP GET đi qua netcat (và trình duyệt của tôi ngồi chờ đợi trong vô ích). Tuy nhiên, nếu tôi truy cập my.external.ip.address:6666, không có gì xảy ra và trình duyệt hiển thị 'không thể kết nối với my.external.ip.address:6666'.

Tôi biết rằng cổng được chuyển tiếp chính xác, vì www.canyouseeme.org cho biết cổng 6666 đang mở (và khi netcat không nghe, đóng cửa).

Nếu tôi chạy netcat với -g my.adslmodem's.local.address để đặt địa chỉ cổng, tôi nhận được cùng một hành vi. Tôi có sử dụng tùy chọn dòng lệnh này một cách chính xác không? Bất kỳ cái nhìn sâu sắc như những gì tôi đang làm sai?

Trả lời

10

Không có vấn đề gì. Nó chỉ xuất hiện theo cách đó bởi vì bộ định tuyến của tôi không cho phép kết nối kẹp tóc. Đó là, mặc dù tôi đã có nó thiết lập một cách chính xác, router sẽ không làm cho kết nối khi cả hai nguồn và đích là đằng sau NAT. Đơn giản chỉ cần ncat -l -p 6666 hoạt động tốt, miễn là yêu cầu đến từ bên ngoài mạng LAN. Để kiểm tra điều này tôi duyệt đến my.external.ip.address:6666 với điện thoại di động 3G của tôi và chắc chắn đủ, một yêu cầu HTTP đến thông qua :)

Câu trả lời này đến từ: a serverfault question, là nơi tôi nên đặt câu hỏi này ngay từ đầu. Xin lỗi vì điều đó.

+0

Hah. Tôi hỏi một câu hỏi tương tự về SF và họ nghĩ rằng nó quá mới mẻ.Tôi không thể nói kết nối "kẹp tóc" là gì (và mọi người liên tục tham khảo "kẹp tóc NAT" và nói với tôi là RTFM) cho đến khi tôi đọc câu trả lời này – isomorphismes

+0

Nó làm việc cho tôi quá.Tôi đã không sử dụng 0.0.0.0 Như bạn đã nói, chỉ có cổng trên máy mục tiêu Cảm ơn! –

19

Bạn phải nghe trên giao diện công cộng. Bạn hiện đang nghe trên máy chủ cục bộ nơi không ai ngoài máy tính của bạn có thể kết nối.

Tốc độ của bạn có thể thay đổi, nhưng với việc triển khai netcat của tôi, tôi phải sử dụng dòng lệnh này để nghe trên tất cả các giao diện công cộng.

ncat -vv -l 0.0.0.0 6666

+2

Cám ơn câu trả lời của bạn. Tôi không nghĩ rằng đó là trường hợp, như netcat vui vẻ nhận được kết nối từ các máy tính khác trên mạng của tôi. Ngoài ra khi nó bắt đầu nó sẽ hiển thị "nghe trên [bất kỳ] 6666 ...". Tôi đã thử đề xuất của bạn (với "-p" trước cổng, nếu không nó chọn một cổng ngẫu nhiên) và nhận "0.0.0.0: tra cứu máy chủ ngược không thành công: Máy chủ không xác định" :( – Chris

+0

Hoạt động trên Cygwin quá (nc) – golimar

4

Để xác định một địa chỉ nghe:

nc -l -s <LISTENING_IP_ADDR> -p <LISTENING_PORT> 

Thử nghiệm trên một Jessie Debian với netcat-traditional-1.10-41

+1

Không thể sử dụng cả '-l' và' -s' cùng nhau. – benedikt

+1

@benedikt: một số phiên bản 'nc' có thể, một số không thể. ' nc.traditional' trên Debian có thể: 'nc -l -s 192.168.18.100 -p 6666' Thay vì'/bin/nc.openbsd' trên Ubuntu không thể: 'nc -l -s 192.168.244.163 -p 6666 nc: không thể sử dụng -s và -l' –

+0

Cảm ơn bạn đã giải thích rõ – benedikt