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
}