반응형
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
반응형
'스크립트' 카테고리의 다른 글
os 모듈과 subprocess 모듈의 차이점 (0) | 2024.05.02 |
---|---|
SSH 공개 키를 복사하는 스크립트 (0) | 2024.02.05 |
쉘 스크립트에서 환경 변수를 설정하는 여러 가지 방법 (0) | 2023.11.20 |
쉘 스크립트에서 중요한 정보를 환경 변수에 저장하고 스크립트에서 사용하는 방법 (0) | 2023.11.20 |
쉘 스크립트의 명령행 인자(arguments)를 사용하는 방법 (0) | 2023.11.20 |