파이썬으로 원하는 패턴을 생성
모듈 : scapy
패킷 / 프레임 생성기능을 갖고 있다
IP() / Ether() >>> 객체 생성됨
import scapy from scapy.all import srp, Ether, ARP, conf
srp() : 메서드 : send() ~> 생성된 패킷을 전달하고 응답을 수신한다.
Ether() : 인스턴스 ~> 생성된 프레임을 전달하고 응답을 수신한다.
(패킷(프레임)) >>> srp()/Ether() >>> srp(Ether())
ARP() : 인스턴스 ~> arp 패킷 생성(필수인자) ~> L3 : Dst.ip
L2 : Dst.mac(MC, BC)
ICMP() : 인스턴스 ~> icmp 패킷 생성
from scapy.all import srp, Ether, ARP, conf
print("NI 예시 : 192.168.0.0/24")
net = input("탐색할 NI를 적어주세요 : ")
conf.verb = 0 # arp type 0 / sub type 8 >>> BC
ans, uans = srp(Ether(dst="ff:ff:ff:ff:ff:ff")/ARP(pdst=net), timeout=2)
#srp(Ether()) >>> 응답 >>> tuple
print("시작")
for snd, rcv in ans:
print(rcv.sprintf(r"MAC : %Ether.src% & IP : %ARP.psrc%"))
print("종료")
import socket
import time
import threading
ip = input("스캔 대상 IP입력 : ")
s_port = int(input("시작 포트번호 : "))
d_port = int(input("종료 포트번호 : "))
threads = []
open_port = []
def port():
try:
port_scanner = socket.socket()
port_scanner.connect((ip,s_port))
receive = port_scanner.recv(99999)
if receive:
open_port.append("port : " + str(s_port) + " [open] : " + str(receive))
#elif receive == 'b' or '':
#print("port :" + str(s_port) + " [close]: port close")
#port_scanner.close()
except Exception as err:
print("port : " + str(s_port) + " [close] : port close")
finally:
port_scanner.close()
for i in range(s_port, d_port + 1):
t = threading.Thread(target=port)
threads.append(t)
for t in threads:
t.start()
time.sleep(0.01)
s_port += 1
if s_port == d_port + 1:
pass
for t in threads:
t.join()
for i in open_port:
print(i)
print("End")
: thread 추가
import socket
import time
import threading
ip = input("스캔 대상 IP입력 : ")
s_port = int(input("시작 포트번호 : "))
d_port = int(input("종료 포트번호 : "))
threads = []
open_port = []
def port():
try:
port_scanner = socket.socket()
port_scanner.connect((ip, s_port))
receive = port_scanner.recv(99999)
if receive:
open_port.append("\033[34m port\033[0m : " + str(s_port) + " \033[91m [open] : \033[0m" + str(receive))
print("\033[34m port\033[0m : " + str(s_port) + " \033[91m [open] : \033[0m" + str(receive))
#elif receive == 'b' or '':
#print("port :" + str(s_port) + " [close]: port close")
#port_scanner.close()
except Exception as err:
print("\033[34m port \033[0m: " + str(s_port) + " \033[30m [close] \033[0m: port close")
finally:
port_scanner.close()
for i in range(s_port, d_port + 1):
t = threading.Thread(target=port)
threads.append(t)
for t in threads:
t.start()
time.sleep(0.01)
s_port += 1
if s_port == d_port:
pass
for t in threads:
t.join()
print("\n\n open ports")
for i in open_port:
print(i)
print("End")'Python' 카테고리의 다른 글
| Python 라이브러리 (0) | 2023.06.12 |
|---|---|
| Python Study (0) | 2023.06.09 |