네트워크에 연결할 수 있는지 명령줄에서 확인하는 방법은 무엇입니까?

네트워크에 연결할 수 있는지 명령줄에서 확인하는 방법은 무엇입니까?

SuSE 서버가 부팅 프로세스를 마친 후 나 자신에게 으르렁거리는 소리를 보내고 싶습니다. 이 메시지를 받았습니다 socket_sendto(): unable to write to socket [101]: Network is unreachable in.

네트워크에 연결할 수 있는지 명령줄에서 확인하고 그렇지 않은 경우를 기다리려면 어떻게 해야 합니까?


답변1

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.0나머지 인터넷에 액세스하는 데 사용하는 기본 게이트웨이를 에서 찾을 수 있음을 나타냅니다 192.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대상에 대한 연결이 실패할 수 있는 위치를 확인하는 것과 같은 고급 도구를 사용하여 조사를 시작할 수 있습니다 .

growl그러나 실제로 무엇이 필요한지 Google에서 빠르게 확인한 후에 는 뭔가 잘못되고 있다는 느낌을 받았습니다. 질문을 확장하여 수행하려는 작업, 시도 방법 및 전체 오류 출력에 대한 몇 가지 세부 정보를 제공할 수 있습니까? 현재 제공하고 있는 회선이 갑자기 끊어졌습니다...

답변2

매우 간단하고 빠른 방법은 ping명령을 사용하는 것입니다.

간단히 입력할 수 있습니다.

 $ ping yahoo.com

(또는 cnn.com 또는 다른 호스트) 출력을 다시 받는지 확인하세요. 이는 호스트 이름을 확인할 수 있다고 가정합니다(즉, DNS가 작동 중임). 그렇지 않은 경우 원격 시스템의 유효한 IP 주소/번호를 제공하고 연결할 수 있는지 확인할 수 있습니다.

여기에핑 매뉴얼 페이지.

업데이트:

간단한 예로 다음을 확인할 수 있습니다.반환 값(예: "echo $?") from 을 사용하여 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

답변3

netcat원하는 서비스를 이용하겠습니다 .

예를 들어 IP 포트 테스트에 성공하면

> nc -zv 192.168.1.1 80
Connection to 172.26.0.1 80 port [tcp/http] succeeded!

...그리고 실패

> nc -zv 192.168.1.1 22
netcat: connect to 172.26.0.1 port 22 (tcp) failed: Connection refused

10초 타임아웃

> nc -zv -w 10 10.0.0.1 80
netcat: connect to 10.0.0.1 port 80 (tcp) timed out: Operation now in progress

답변4

다음 함수를 사용합니다. 기본값은 쿼드9이지만 다른 도메인을 전달할 수 있습니다. 15분 동안 시도하면 시간 초과됩니다.

wait_for_dns() {

   local fqhn="quad9.net"
   fqhn=${1:-$fqhn}

   printf "waiting"
   for i in {1..15}; do
      local a_record=$(dig +short +time=2 $fqhn)

      if [[ $a_record != '' ]]; then
         printf "\n"
         return 0
      fi

      printf '.'
      sleep 60
   done

   printf "\n"
   return 1
}

관련 정보