Làm thế nào để kiểm tra từ một dòng lệnh mà mạng có thể truy cập?


12

Tôi muốn gửi một tiếng gầm gừ cho chính mình sau khi máy chủ SuSE kết thúc quá trình khởi động. Tôi nhận được tin nhắn này socket_sendto(): unable to write to socket [101]: Network is unreachable in.

Làm cách nào tôi có thể kiểm tra từ dòng lệnh nếu mạng có thể truy cập và chờ trong trường hợp không có?



Linux one-liner để trả lời có hay không, chúng ta có kết nối với internet không : ping -c 1 www.yourtrustedserver.com | grep " 0% packet loss". Những gì nó làm là ping máy chủ với một gói và greps đầu ra cho chuỗi "mất gói 0%". (khoảng trắng trước 0% là quan trọng) Nếu lệnh trả về một hàng, bạn được kết nối, nếu không, không được kết nối.
Eric Leschinski

Câu trả lời:


13

ping với một máy chủ bên ngoài có thể thất bại vì vô số lý do, chỉ một vài trong số đó thực sự nói bất cứ điều gì hữu ích về trạng thái của mạng của bạn.

Bước đầu tiên, mở một cửa sổ đầu cuối và gõ ip route ls

Bạn sẽ thấy một đầu ra dọc theo dòng

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 

Điều này cho biết rằng mạng cục bộ của bạn là một kết nối ethernet ( eth0) với địa chỉ 192.168.15.0và có thể tìm thấy cổng mặc định mà nó truy cập vào phần còn lại của internet 192.168.15.1.

Tiếp theo, bạn có thể thử đến pingđịa chỉ đó:

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

Nếu bạn thấy một cái gì đó tương tự như trên, thì mạng cục bộ của bạn, ít nhất là tốt. Tại thời điểm này, bạn có thể bắt đầu tìm kiếm với các công cụ nâng cao hơn như tracerouteđể xem nơi kết nối của bạn đến đích có thể bị lỗi.

Tuy nhiên, sau khi kiểm tra nhanh trên google về những gì growlthực sự được cho là tôi có cảm giác rằng có điều gì đó không ổn. Bạn có thể mở rộng câu hỏi của mình để cung cấp cho chúng tôi thêm một vài chi tiết về những gì bạn đang cố gắng thực hiện, cách bạn đang thử nó và đầu ra lỗi đầy đủ không? Dòng bạn hiện đang cung cấp cho chúng tôi bị cắt đứt đột ngột ...


3
ip route get 1.2.3.4đáng tin cậy hơn là chỉ làm ip route ls. Cái trước sẽ có hiệu lực của bất kỳ quy tắc nào được áp dụng ngoài các tuyến đường. Nó cũng loại bỏ khả năng đọc sai (các) bảng định tuyến.
Patrick

3

Một cách rất đơn giản và nhanh chóng là sử dụng pinglệnh.

Bạn chỉ cần gõ

 $ ping yahoo.com

(hoặc cnn.com hoặc bất kỳ máy chủ lưu trữ nào khác) và xem liệu bạn có nhận được bất kỳ đầu ra nào không. Điều này giả định rằng tên máy chủ có thể được giải quyết (tức là dns đang hoạt động). Nếu không, bạn có thể hy vọng cung cấp một địa chỉ IP / số hợp lệ của một hệ thống từ xa và xem liệu nó có thể đạt được không.

Đây là trang ping man .

Cập nhật :

Để làm ví dụ nhanh, bạn có thể kiểm tra giá trị trả về (ví dụ: với "echo $?") pingđể xem lệnh có thành công không (bạn luôn có thể dẫn đầu ra của lệnh tới > /dev/nul). Lưu ý tôi sử dụng -c 1ở đây, nhưng bạn có thể sử dụng nhiều hơn.

$ 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

Nhưng làm thế nào tôi có thể nhận ra từ việc sử dụng ping rằng mọi thứ đều ổn?
Radek

1
@Radek Bạn đã thử chạy nó chưa? ping cho bạn biết nếu nó được trả lời.
jw013

Điều gì xảy ra nếu máy chủ chỉ ở trên mạng nội bộ và không có quyền truy cập vào thế giới bên ngoài?
Radek

@ jw013: Tôi chưa thử ... Tôi không biết sử dụng ping từ một tập lệnh không giám sát.
Radek

3
@Radek nó khá đơn giản. Tôi giả sử bằng 'kết nối', bạn có nghĩa là nó có thể nói chuyện với một số máy chủ khác trên mạng nội bộ. Vì vậy, chạy ping -c 2 -n <other host's IP>và hoạt động trên mã trả về: nếu đúng (0), thì nó có kết nối; nếu sai (1), thì nó không thể nói chuyện với máy đó.
lxop

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.