ฉันมีแอปพลิเคชัน PHP ซึ่งพยายามเปิดการเชื่อมต่อซ็อกเก็ตไปยังเครื่องพิมพ์ผ่านเราเตอร์ของฉัน
สองสามสิ่งที่ควรทราบ - ทักษะด้านเครือข่ายของฉันยังขาดอยู่ ดังนั้นฉันจึงอาจพลาดบางสิ่งที่ชัดเจน หรือสิ่งนี้อาจเป็นไปไม่ได้เลยแม้แต่น้อยในแบบที่ฉันต้องการ ดังที่กล่าวไว้ ฉันได้ทำการค้นหาเกี่ยวกับปัญหานี้หลายครั้งและดูเหมือนจะไม่พบใครก็ตามที่มีปัญหานี้ (มีผู้คนจำนวนมากที่พยายามใช้ SSH จากระยะไกล) ฉันรู้ด้วยว่าอุปกรณ์ที่ฉันพยายามเชื่อมต่อนั้นทำงานได้ตามที่ตั้งใจไว้ เพราะฉันมีแอปพลิเคชัน nodejs ขนาดเล็กที่เปิดการเชื่อมต่อไปยังอุปกรณ์บนเครือข่ายท้องถิ่นได้สำเร็จ และสุดท้าย ฉันใช้ Docker เพื่อเรียกใช้แอปพลิเคชัน PHP ในเครื่อง ซึ่งอาจเกี่ยวข้องกับปัญหาของฉัน (แม้ว่าฉันจะรู้ว่าการเชื่อมต่อกำลังเข้าถึงเราเตอร์เนื่องจากบันทึก)
รหัสนั้นง่าย:
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
socket_set_option($ซ็อกเก็ต, SOL_TCP, SO_DEBUG, 1);
$server_connect = socket_connect($socket, "เราเตอร์_public_ip", 9100);
ภายในเราเตอร์ของฉัน ฉันตั้งค่าพอร์ตที่จะส่งต่อ:
เมื่อฉันพยายามเชื่อมต่อ PHP จะโยน socket_connect(): ไม่สามารถเชื่อมต่อได้ [111]: การเชื่อมต่อถูกปฏิเสธ
และบันทึกของเราเตอร์แสดงว่าการเชื่อมต่อล้มเหลว
ฉันสังเกตเห็นในบันทึกของเราเตอร์ว่าพอร์ตเริ่มต้นเป็นแบบสุ่ม และลองเปลี่ยนการกำหนดค่าการส่งต่อพอร์ตของฉันเป็น:
สิ่งนี้ให้ผลลัพธ์เดียวกันแก่ฉันและเราเตอร์ของฉันไม่ได้ให้ข้อมูลมากมายแก่ฉัน (เกี่ยวกับสาเหตุที่การเชื่อมต่อล้มเหลว มันถูกบล็อกหรือไม่) นี่คือทั้งหมดที่แสดงในบันทึก:
แก้ไข:
เมนูยูทิลิตีการกำหนดค่าเครื่องพิมพ์ดูเหมือนจะไม่กล่าวถึงสิ่งใดเกี่ยวกับไฟร์วอลล์หรือการเชื่อมต่อระยะไกล