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

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

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
}

관련 정보