[bash] Bash로 인터넷 연결을 테스트하는 방법은 무엇입니까?

일부 웹 사이트를 핑하지 않고 어떻게 인터넷 연결을 테스트 할 수 있습니까? 연결되어 있지만 사이트가 다운되면 어떻게됩니까? 세상과의 연결에 대한 점검이 있습니까?



답변

핑없이

#!/bin/bash

wget -q --spider http://google.com

if [ $? -eq 0 ]; then
    echo "Online"
else
    echo "Offline"
fi

-q : 무음 모드

-거미 : 이해하지 말고 페이지 가용성을 확인하십시오.

$? : 쉘 리턴 코드

0 : 쉘 “All OK”코드

wget없이

#!/bin/bash

echo -e "GET http://google.com HTTP/1.0\n\n" | nc google.com 80 > /dev/null 2>&1

if [ $? -eq 0 ]; then
    echo "Online"
else
    echo "Offline"
fi


답변

기본 게이트웨이를 ping합니다.

#!/bin/bash
ping -q -w 1 -c 1 `ip r | grep default | cut -d ' ' -f 3` > /dev/null && echo ok || echo error


답변

사용자 somedrew 에게 감사드립니다 : https://bbs.archlinux.org/viewtopic.php?id=55485 on 2008-09-20 02:09:48

/ sys / class / net을 찾는 것이 한 가지 방법이어야합니다.

다음은 루프백 이외의 네트워크 연결을 테스트하는 스크립트입니다. 내 웹 사이트에 액세스 할 수 있는지 주기적으로 테스트하기 위해 다른 스크립트에서 아래를 사용합니다. 액세스 할 수없는 경우 팝업 창에서 문제를 알려줍니다.

아래 스크립트는 노트북이 네트워크에 연결되어 있지 않을 때마다 5 분마다 팝업 메시지를받지 못하도록합니다.

#!/usr/bin/bash

# Test for network conection
for interface in $(ls /sys/class/net/ | grep -v lo);
do
  if [[ $(cat /sys/class/net/$interface/carrier) = 1 ]]; then OnLine=1; fi
done
if ! [ $OnLine ]; then echo "Not Online" > /dev/stderr; exit; fi

bash를 처음 접하는 사람들을위한 참고 사항 : 마지막 ‘if’문은 온라인이 아닌 경우 [!] 테스트하고이 경우 종료됩니다. 자세한 내용은 man bash를 참조하고 “표현식 조합 가능”을 검색하십시오.

추신 : 핑은 어떤 종류 의 네트워크 에 대한 연결이 있는지 테스트하지 않고 특정 호스트에 대한 연결 테스트하는 것을 목표로하기 때문에 여기서 사용하기에 가장 좋은 것이 아니라고 생각합니다 .

PPS 위는 Ubuntu 12.04에서 작동합니다. / sys는 다른 배포판에 없을 수 있습니다. 아래를 참조하십시오.

최신 Linux 배포판에는 가상 파일 시스템으로 / sys 디렉토리가 포함되어 있습니다 (sysfs, procfs 인 / proc와 비교).이 디렉토리는 시스템에 연결된 장치를 저장하고 수정할 수있는 반면 많은 기존 UNIX 및 Unix 유사 운영 체제는 / sys는 커널 소스 트리에 대한 심볼릭 링크입니다. [인용 필요]

Wikipedia https://en.wikipedia.org/wiki/Filesystem_Hierarchy_Standard에서


답변

이것은 MacOSX와 Linux 모두에서 작동합니다.

#!/bin/bash

ping -q -w1 -c1 google.com &>/dev/null && echo online || echo offline


답변

Bash에서는 / dev / { udp , tcp } / host / port를 통해 네트워크 래퍼를 사용합니다 .

if : >/dev/tcp/8.8.8.8/53; then
  echo 'Internet available.'
else
  echo 'Offline.'
fi

( :연결을 테스트하고 싶지만 처리하지 않기 때문에 Bash no-op입니다.)


답변

텔넷을 사용하여 포트 80에 연결 한 다음 텍스트를 전송하기 전에 스크립트를 작성했습니다.

HTTP/1.0 GET /index.html

두 개의 CR / LF 시퀀스가 ​​뒤 따릅니다.

어떤 형식의 HTTP 응답을 받으면 일반적으로 사이트가 작동하고 있다고 가정 할 수 있습니다.


답변

최고의 대답은 기본 게이트웨이에 완벽하게 안정적인 연결을 가질 수 있다는 사실을 놓치지 만 이것이 인터넷에서 실제로 무언가에 도달 할 수 있다는 것을 자동으로 의미하지는 않습니다. OP는 어떻게 세상과의 연결을 테스트 할 수 있는지 묻습니다. 따라서 게이트웨이 IP를 LAN 외부에있는 알려진 IP (xyzw)로 변경하여 최상위 답변을 변경하는 것이 좋습니다.

따라서 대답은 다음과 같습니다.

ping -q -w 1 -c 1 x.y.z.w > /dev/null && echo ok || echo error

또한 명령 대체 [1]에 대해 선호하지 않는 백틱 제거 .

일부 코드를 실행하기 전에 세계에 연결되어 있는지 확인하려면 다음을 사용할 수도 있습니다.

if ping -q -w 1 -c 1 x.y.z.w > /dev/null; then
    # more code
fi