728x90
ICMP Ping 테스트를 수행하는 Python 스크립트
주어진 서브넷의 호스트에 대해 ICMP Ping 테스트를 수행하는 Python 스크립트입니다.
스크립트 편집
vim check_icmp_ping.py
import sys
import subprocess
import ipaddress
def ping(host):
"""
주어진 호스트에 대한 ping을 수행하고 결과를 반환합니다.
"""
try:
# 플랫폼에 따라 ping 명령어의 형식이 다를 수 있습니다.
subprocess.run(["ping", "-c", "1", "-W", "1", host], stdout=subprocess.PIPE, stderr=subprocess.PIPE, check=True)
return 0 # 성공
except subprocess.CalledProcessError:
return 1 # 실패
def main(subnet_input):
try:
# 입력받은 서브넷을 이용하여 네트워크 주소 추출
network = ipaddress.IPv4Network(subnet_input, strict=False)
except ValueError as e:
print(f"Error: {e}")
return
# ping 테스트 수행
for host in network.hosts():
response = ping(str(host))
# 응답 확인 및 결과 출력
if response == 0:
print(f"{host}\tis reachable")
else:
print(f"{host}\tis unreachable")
if __name__ == "__main__":
# 명령행 인수에서 서브넷을 받아옴
if len(sys.argv) != 2:
print("Usage: python check_icmp_ping.py <subnet>")
sys.exit(1)
subnet_input = sys.argv[1]
main(subnet_input)
- ping 함수 :
- ping 함수는 주어진 호스트에 대한 ping을 수행하고 결과를 반환합니다.
- subprocess.run 함수를 사용하여 시스템 명령어를 실행합니다.
- ping 명령어의 실행이 성공하면 0을 반환하고, 실패하면 1을 반환합니다.
- main 함수 :
- main 함수는 주어진 서브넷에 속하는 호스트에 대해 ping 테스트를 수행합니다.
- 입력받은 서브넷을 이용하여 네트워크 주소를 추출합니다.
- 각 호스트에 대해 ping 함수를 호출하여 응답 확인 및 결과를 출력합니다.
- 스크립트 실행 부분 :
- if __name__ == "__main__":은 스크립트가 직접 실행될 때만 코드 블록이 실행되도록 하는 부분입니다.
- 명령행에서 서브넷을 받아오고, main 함수를 호출하여 스크립트의 주요 동작을 수행합니다.
- 명령행 인수 처리 :
- sys.argv를 사용하여 명령행 인수를 처리합니다.
- 필요한 명령행 인수의 개수가 맞지 않으면 사용 방법을 출력하고 프로그램을 종료합니다.
- 서브넷 처리 :
- ipaddress.IPv4Network를 사용하여 입력받은 서브넷을 이용하여 네트워크 객체를 생성합니다.
- 이때 strict=False로 설정하여 서브넷의 주소 범위를 얻습니다.
- 호스트 반복 :
- network.hosts()를 사용하여 서브넷에 속하는 모든 호스트를 반복합니다.
- 각 호스트에 대해 ping 함수를 호출하여 응답 확인하고 결과를 출력합니다.
- 결과 출력:
- ping 함수의 반환 값에 따라 각 호스트의 상태를 출력합니다.
- 성공하면 "is reachable", 실패하면 "is unreachable"를 출력하며, 이때 탭 문자(\t)로 아이피와 상태를 구분합니다.
728x90
스크립트 실행
스크립트 실행은 서브넷을 명령행 인수로 전달하여 스크립트를 실행할 수 있습니다.
python check_icmp_ping.py 192.168.10.0/29
스크립트 결과 확인
주어진 서브넷의 호스트에 대해 ICMP Ping 테스트를 수행하고 결과를 출력합니다.
$ python check_icmp_ping.py 192.168.10.0/29
192.168.10.1 is reachable
192.168.10.2 is unreachable
192.168.10.3 is unreachable
192.168.10.4 is unreachable
192.168.10.5 is unreachable
192.168.10.6 is unreachable
리눅스에서 사용할 수 있는 네트워크 계산 도구
ipcalc 명령어를 사용하여 주어진 서브넷에 대한 HostMin, HostMax, 그리고 Hosts/Net을 검증하는 예제입니다.
ipcalc -n 192.168.10.0/29
$ ipcalc -n 192.168.10.0/29
Address: 192.168.10.0 11000000.10101000.00001010.00000 000
Netmask: 255.255.255.248 = 29 11111111.11111111.11111111.11111 000
Wildcard: 0.0.0.7 00000000.00000000.00000000.00000 111
=>
Network: 192.168.10.0/29 11000000.10101000.00001010.00000 000
HostMin: 192.168.10.1 11000000.10101000.00001010.00000 001
HostMax: 192.168.10.6 11000000.10101000.00001010.00000 110
Broadcast: 192.168.10.7 11000000.10101000.00001010.00000 111
Hosts/Net: 6 Class C, Private Internet
- HostMin : 서브넷에서 사용 가능한 첫 번째 호스트의 IP 주소입니다.
- HostMax : 서브넷에서 사용 가능한 마지막 호스트의 IP 주소입니다.
- Hosts/Net : 해당 서브넷에서 사용 가능한 호스트의 총 수입니다.
728x90
'리눅스' 카테고리의 다른 글
Ansible에서 사용자 정의 팩트를 정의하고 사용하는 방법 (0) | 2024.01.16 |
---|---|
Ansible Facts (0) | 2024.01.15 |
CentOS 7에서 nginx-module-vts 모듈을 추가하는 방법 (0) | 2024.01.12 |
[draft] nginx에서 사용할 수 있는 모듈을 확인하는 방법 (0) | 2024.01.12 |
Nginx 가상 호스트 트래픽 상태 모듈을 통한 Nginx 모니터링(nginx-module-vts 모듈 추가) (0) | 2024.01.12 |