Created
September 29, 2017 15:58
-
-
Save return0927/e48c03216be7519d6dda49fe7b461cae to your computer and use it in GitHub Desktop.
랜 네트워크에 연결된 호스트들을 탐색합니다 (핑 기반)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- coding: utf-8 -*- python3 | |
# Created At 2017.9.30 | |
# For ARP.py | |
# By R3turn0927 | |
# Github @return0927 | Facebook @R3turn.01 | KakakoTalk @bc1916 | |
from scapy.all import * | |
from subprocess import getoutput | |
import threading as 멀티코어 | |
타임아웃 = 2 | |
conf.verb = 0 | |
class 랜네트워크_디스커버리(): | |
def __init__(클래스): | |
클래스.타임아웃 = 5 | |
클래스.테이블 = {} | |
클래스.쓰레드 = [] | |
def 핑(클래스, 아이피): | |
패킷 = IP(dst=아이피, ttl=64)/ICMP() | |
응답 = sr1(패킷, timeout=클래스.타임아웃, verbose=0) | |
클래스.테이블[아이피] = 응답 | |
def 핑2(클래스, 아이피): | |
결과 = getoutput("ping -c 1 -s 1 %s"%아이피) | |
try: | |
클래스.테이블[아이피] = 결과.split("\n")[-2][23:24] | |
#클래스.테이블[아이피] = 결과.split("\n")[-2][:33] = "1 packets trasmitted, 1 received" | |
except Exception as ex: | |
클래스.테이블[아이피] = str(ex) | |
def 생성(클래스, 아이피대역, B클래스): | |
return ".".join(아이피대역.split(".")[:3])+"."+str(B클래스) | |
def 트리거(클래스): | |
아이피대역 = input("아이피대역을 입력해주세요. /24만 가능\n [192.168.0.0]: ") | |
if 아이피대역 == "": | |
아이피대역 = "192.168.0.0" | |
for B클래스 in range(1, 256): | |
클래스.쓰레드.append(멀티코어.Thread(target=클래스.핑2, args=( 클래스.생성(아이피대역, B클래스) ,))) | |
for 쓰레드 in 클래스.쓰레드: | |
쓰레드.start() | |
반복 = True | |
while 반복: | |
임시 = False | |
for 쓰레드 in 클래스.쓰레드: | |
if 쓰레드.isAlive(): | |
임시 = True | |
break | |
if 임시: | |
반복 = True | |
else: | |
반복 = False | |
print("\n".join( [ "%30s %s" % ( 키, str(클래스.테이블[키]) ) for 키 in sorted( list(filter( lambda x: 클래스.테이블[x] == '1', 클래스.테이블.keys() )) ) ] )) | |
핑 = 랜네트워크_디스커버리() | |
핑.트리거() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment