티스토리 뷰
traceroute는 로컬에서 목적지 서버로 가는 네트워크 경로를 확인해주는 툴인데, 이를 Python으로 구현한 예제입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | #!/usr/bin/python import socket def main(dest_name): dest_addr = socket.gethostbyname(dest_name) port = 33434 max_hops = 30 icmp = socket.getprotobyname('icmp') udp = socket.getprotobyname('udp') ttl = 1 while True: recv_socket = socket.socket(socket.AF_INET, socket.SOCK_RAW, icmp) send_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, udp) send_socket.setsockopt(socket.SOL_IP, socket.IP_TTL, ttl) recv_socket.bind(("", port)) send_socket.sendto("", (dest_name, port)) curr_addr = None curr_name = None try: _, curr_addr = recv_socket.recvfrom(512) curr_addr = curr_addr[0] try: curr_name = socket.gethostbyaddr(curr_addr)[0] except socket.error: curr_name = curr_addr except socket.error: pass finally: send_socket.close() recv_socket.close() if curr_addr is not None: curr_host = "%s (%s)" % (curr_name, curr_addr) else: curr_host = "*" print "%d\t%s" % (ttl, curr_host) ttl += 1 if curr_addr == dest_addr or ttl > max_hops: break if __name__ == "__main__": main('google.com') | cs |
'프로그래밍' 카테고리의 다른 글
Python 시간 변환 (0) | 2020.03.06 |
---|---|
Python 스위치에서 트래픽 정보 수집 (0) | 2020.03.06 |
Python 여러가지 싱글톤(singleton) 구현방법 (0) | 2020.03.02 |
Python 매직 메소드와 연산자 오버로딩 (0) | 2020.02.22 |
Python Flask-RESTPlus로 API 서버 구축 (0) | 2020.02.20 |
댓글
warpmemory
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
페이지
TAG
- error
- File
- client
- httpd
- MariaDB
- example
- 명령어
- mysql
- RESTful
- Linux
- code
- 예제
- configuration
- Module
- 외부링크
- deview
- check
- Python
- command
- Web
- Windows
- 번역
- limits
- apache
- 코드
- Ansible
- PowerShell
- engineering
- 이슈처리
- monitoring
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함