วิธีการตรวจสอบจากบรรทัดคำสั่งที่เครือข่ายสามารถเข้าถึงได้?


12

ฉันต้องการส่งคำรามให้กับตัวเองหลังจากเซิร์ฟเวอร์ SuSE เสร็จสิ้นกระบวนการบูท ฉันได้รับข้อความsocket_sendto(): unable to write to socket [101]: Network is unreachable inนี้

ฉันจะตรวจสอบจากบรรทัดคำสั่งหากเครือข่ายสามารถเข้าถึงได้และรอในกรณีที่มันไม่ได้?



Linux หนึ่งซับเพื่อตอบว่าใช่หรือไม่ใช่เราเชื่อมต่อกับอินเทอร์เน็ตping -c 1 www.yourtrustedserver.com | grep " 0% packet loss"หรือไม่ สิ่งนี้จะเป็นการ ping เซิร์ฟเวอร์ที่มีหนึ่งแพ็คเก็ตและ greps เอาท์พุทสำหรับสตริง "0% การสูญเสียต" (พื้นที่ก่อน 0% เป็นสิ่งสำคัญ) หากคำสั่งส่งคืนแถวคุณกำลังเชื่อมต่อไม่เช่นนั้นจะไม่เชื่อมต่อ
Eric Leschinski

คำตอบ:


13

ping สำหรับโฮสต์ภายนอกอาจล้มเหลวด้วยเหตุผลหลายประการมีเพียงไม่กี่คนเท่านั้นที่พูดสิ่งที่มีประโยชน์เกี่ยวกับสถานะของเครือข่ายของคุณ

ในขั้นตอนแรกให้เปิดหน้าต่างเทอร์มินัลแล้วพิมพ์ ip route ls

คุณควรเห็นผลลัพธ์ตามบรรทัดของ

shadur@equinox:~$ ip route ls
192.168.15.0/24 dev eth0  proto kernel  scope link  src 192.168.15.102 
default via 192.168.15.1 dev eth0 

นี้บ่งชี้ว่าเครือข่ายของคุณคือการเชื่อมต่ออีเธอร์เน็ต ( eth0) ที่มีอยู่และที่เกตเวย์เริ่มต้นผ่านซึ่งมันเข้าถึงส่วนที่เหลือของอินเทอร์เน็ตที่สามารถพบได้ที่192.168.15.0192.168.15.1

ถัดไปคุณสามารถลองไปยังpingที่อยู่นั้น:

shadur@equinox:~$ ping 192.168.15.1
PING 192.168.15.1 (192.168.15.1) 56(84) bytes of data.
64 bytes from 192.168.15.1: icmp_req=1 ttl=255 time=0.352 ms
64 bytes from 192.168.15.1: icmp_req=2 ttl=255 time=0.269 ms
^C
--- 192.168.15.1 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.269/0.310/0.352/0.045 ms

หากคุณเห็นสิ่งที่คล้ายกับข้างต้นเครือข่ายท้องถิ่นของคุณอย่างน้อยก็ใช้ได้ ณ จุดนี้คุณสามารถเริ่มค้นหาด้วยเครื่องมือขั้นสูงเพิ่มเติมเช่นtracerouteเพื่อดูว่าการเชื่อมต่อไปยังปลายทางของคุณอาจล้มเหลว

อย่างไรก็ตามหลังจากตรวจสอบ google อย่างรวดเร็วในสิ่งที่growlควรจะเป็นจริงฉันรู้สึกว่ามีบางอย่างผิดปกติ คุณสามารถขยายคำถามของคุณเพื่อให้รายละเอียดเพิ่มเติมเกี่ยวกับสิ่งที่คุณพยายามทำวิธีที่คุณพยายามทำและผลลัพธ์ข้อผิดพลาดทั้งหมด บรรทัดที่คุณกำลังให้เราถูกตัดทันที ...


3
ip route get 1.2.3.4ip route lsมีความน่าเชื่อถือมากขึ้นกว่าเพียงแค่การทำ อดีตจะมีผลบังคับใช้กฎใด ๆ ที่อยู่ในสถานที่นอกเหนือไปจากเส้นทาง นอกจากนี้ยังลบความเป็นไปได้ของการอ่านผิดตารางเส้นทาง
แพทริค

3

วิธีที่ง่ายและรวดเร็วมากคือการใช้pingคำสั่ง

คุณสามารถพิมพ์

 $ ping yahoo.com

(หรือ cnn.com หรือโฮสต์อื่น ๆ ) และดูว่าคุณได้รับผลลัพธ์กลับมาหรือไม่ นี่จะถือว่าชื่อโฮสต์สามารถแก้ไขได้ (เช่น dns กำลังทำงาน) หากไม่มีคุณหวังว่าจะสามารถให้ที่อยู่ IP ที่ถูกต้อง / หมายเลขของระบบระยะไกลและดูว่าสามารถเข้าถึงได้

นี่คือหน้าคน ping

อัปเดต :

เป็นตัวอย่างรวดเร็วคุณสามารถตรวจสอบค่าส่งคืน (เช่นด้วย"echo $?") จากpingเพื่อดูว่าคำสั่งสำเร็จหรือไม่ (คุณสามารถไพพ์เอาต์พุตของคำสั่ง> /dev/nulได้เสมอ) หมายเหตุฉันใช้-c 1ที่นี่ แต่คุณสามารถใช้งานได้มากกว่านี้

$ ping -c 1 yahoo.com
PING yahoo.com (72.30.38.140) 56(84) bytes of data.
64 bytes from ir1.fp.vip.sp2.yahoo.com (72.30.38.140): icmp_seq=1 ttl=52 time=83.5 ms

--- yahoo.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 83.593/83.593/83.593/0.000 ms

echo $?
0


$ ping -c 1 unicorns.are.here
ping: unknown host unicorns.are.here

$ echo $?
2

แต่ฉันจะรู้ได้อย่างไรจากการใช้ ping ที่ทุกอย่างโอเค
Radek

1
@Radek คุณได้ลองใช้งานหรือยัง ping บอกคุณว่าได้รับคำตอบหรือเปล่า
jw013

ถ้าเซิร์ฟเวอร์อยู่บนอินทราเน็ตเท่านั้นและไม่สามารถเข้าถึงโลกภายนอกได้
Radek

@ jw013: ฉันยังไม่ได้ลอง ... ฉันไม่รู้จะใช้ ping จากสคริปต์ที่ไม่ต้องใส่ข้อมูล
Radek

3
@ Radek มันค่อนข้างง่าย ฉันถือว่า 'การเชื่อมต่อ' คุณหมายถึงมันสามารถพูดคุยกับโฮสต์อื่น ๆ บนอินทราเน็ต ดังนั้นให้เรียกใช้ping -c 2 -n <other host's IP>และดำเนินการกับรหัสส่งคืน: ถ้าเป็นจริง (0) แสดงว่ามีการเชื่อมต่อ ถ้า false (1) จะไม่สามารถคุยกับเครื่องนั้นได้
lxop

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.