Arp spoofing Application
syntax : ./arp-spoof <interface> <sender ip 1> <target ip 1> [<sender ip 2> <target ip 2>...]
sample : ./arp-spoof wlan0 192.168.10.2 192.168.10.1 192.168.10.1 192.168.10.2
sender ip
is the victim's ip.target ip
is the gateway's ip.- attacker is you.
- header/* and skeleton codes are from https://gitlab.com/gilgil/send-arp-test.git
구현한 것
- 여러개의 input들이 들어올 때 모두 처리
- SIGINT가 발생시 arp-spoof를 풀어주는 과정
- 주기적으로 Infection 패킷을 보내는 것
- 쓰레딩을 통해 해결1
- 패킷 릴레이 해주는 것
- Arp 패킷이 오면 infection 패킷을 보내는 것
- 쓰레딩을 통해 해결2
-
resolving은 2번으로 해결할 것.
-
VM으로 실행할 때, Host ARP Table 처리
-
Threading을 통해서 동시에 처리할 것
-
signal(SIGINT, function pointer)
를 통해서 Ctrl+C 를 처리하기 -
무선상에서는 패킷 loss가 생길 수 있으니, sleep이 꼭 필요함
-
IP 패킷과 ARP 패킷을 따로 처리를 해주는 것이 과제의 핵심
-
Flow를 관리하기 위해서 std::vector, std::map, list 등 사용 하는 데... 이 부분 가장 중요
-
TCP, HTTP 잘 이동하는 지 확인
-
동글이 Ubuntu에 집어 넣는 법
https://askubuntu.com/questions/1162974/wireless-usb-adapter-0bdac811-realtek-semiconductor-corp
보고 해보니 성공!
- Send2Tar 를 제대로 바꿀 것 (하나의 sender에 여러개의 target이 들어오는 경우를 처리해야 함.)
- MTU를 고려해서 조금씩 나눠서 TCP 보낼 것
- exit(0)으로 끝내는 것이 아니라 while문들을 exit_flag로 지정할 것
- producer-consumer thread 방법 찾아서 적용해볼 것
- WaitForSingleObjecty(aka WaitEvent)? alternative 라는 것을 thread sleep 대신 사용할 것
- find가 너무 많이 사용됨. std::map에서 []도 find사용되는 데 iterator로 처리
- gateway에서 sender_ip의 처리도 고칠 것