NEtTools.git

NEtTools

~
git clone https://github.com/debuman/NEtTools.git
commit 875437c01259d872d5c0a78b82faf85cae9d1ae2
parent e60af0752c63847b1bb8b66c8bfe6b8132e24fd5
Author: Decoy Zero <110329244+devastator-x@users.noreply.github.com>
Date: Sat, 26 Oct 2024 16:01:25 +0900

Update test option.

When using the -t flag, it will continue to send ARP packets until the user stops.

Diffstat:
Mcreat_arp.py | 72+++++++++++++++++++++++++++++++++++++-----------------------------------
1 file changed, 37 insertion(+), 35 deletion(-)

diff --git a/creat_arp.py b/creat_arp.py
@@ -5,55 +5,57 @@ import sys
 import time
 import argparse
 
-def send_arp_request(target_ip, count):
+def send_arp_request(target_ip, count, continuous):
     """
-    특정 IP 주소에 대한 ARP 요청을 여러 번 전송하고, 응답을 받는 함수
+    특정 IP 주소에 대한 ARP 요청을 여러 번 또는 지속적으로 전송하고, 응답을 받는 함수
     - target_ip: ARP 요청을 보낼 대상의 IP 주소
-    - count: 전송할 ARP 패킷의 수
+    - count: 전송할 ARP 패킷의 수 (continuous가 True일 때는 무시됨)
+    - continuous: True일 경우 사용자가 멈출 때까지 지속적으로 패킷을 전송
     """
     
-    # ARP 요청을 전송 중임을 사용자에게 알림
-    print(f"[*] Sending {count} ARP requests to {target_ip}...")
+    if continuous:
+        print(f"[*] Continuously sending ARP requests to {target_ip}...")
+    else:
+        print(f"[*] Sending {count} ARP requests to {target_ip}...")
     
-    # 지정한 횟수만큼 ARP 요청을 전송
-    for i in range(count):
-        # ARP 요청 패킷을 생성
-        # Ether(dst="ff:ff:ff:ff:ff:ff")는 이더넷 브로드캐스트 주소로 설정
-        # ARP(pdst=target_ip)는 대상 IP 주소로 ARP 요청 패킷을 생성
-        arp_request = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=target_ip)
-        
-        # srp() 함수는 Layer 2 (Ethernet) 계층에서 패킷을 전송하고 응답을 대기하는 함수
-        # arp_request: 생성한 ARP 요청 패킷
-        # timeout=2: 응답을 기다리는 시간(초)
-        # verbose=False: 불필요한 정보를 출력하지 않도록 설정
-        answered, unanswered = srp(arp_request, timeout=2, verbose=False)
-        
-        # 응답이 있는 경우 응답한 패킷들에 대한 MAC 주소를 출력
-        if answered:
-            # answered는 (발신 패킷, 수신 패킷) 쌍의 리스트를 반환
-            for send, receive in answered:
-                # 수신된 패킷의 ARP 레이어에서 MAC 주소(hwsrc)를 추출하여 출력
-                print(f"[{i+1}/{count}] [+] MAC address for {target_ip}: {receive[ARP].hwsrc}")
-        else:
-            # 응답이 없으면 해당 IP에서 응답이 없다는 메시지를 출력
-            print(f"[{i+1}/{count}] [!] No response from {target_ip}")
-        
-        # 각 ARP 요청 후 1초 대기
-        time.sleep(1)
+    try:
+        i = 0
+        while continuous or i < count:
+            # ARP 요청 패킷을 생성
+            arp_request = Ether(dst="ff:ff:ff:ff:ff:ff") / ARP(pdst=target_ip)
+            
+            # srp() 함수는 Layer 2 (Ethernet) 계층에서 패킷을 전송하고 응답을 대기하는 함수
+            answered, unanswered = srp(arp_request, timeout=2, verbose=False)
+            
+            # 응답이 있는 경우 응답한 패킷들에 대한 MAC 주소를 출력
+            if answered:
+                for send, receive in answered:
+                    print(f"[{i+1}] [+] MAC address for {target_ip}: {receive[ARP].hwsrc}")
+            else:
+                print(f"[{i+1}] [!] No response from {target_ip}")
+            
+            i += 1
+            # 각 ARP 요청 후 1초 대기
+            time.sleep(1)
+    
+    except KeyboardInterrupt:
+        print("\n[!] ARP request stopped by user.")
 
 if __name__ == "__main__":
     """
     스크립트의 메인 실행 부분
-    명령행 인자로 전달된 IP 주소와 패킷 수를 사용하여 ARP 요청을 보냄
+    명령행 인자로 전달된 IP 주소와 패킷 수, 또는 지속 전송 옵션을 사용하여 ARP 요청을 보냄
     """
     
     # argparse를 사용하여 명령행 인자 처리
-    parser = argparse.ArgumentParser(description="ARP 요청을 보내는 스크립트")
+    parser = argparse.ArgumentParser(description="Script to send ARP requests")
     # target_ip 인자는 ARP 요청을 보낼 타겟 IP 주소를 지정
-    parser.add_argument("target_ip", help="ARP 요청을 보낼 타겟 IP 주소")
+    parser.add_argument("target_ip", help="Target IP address to send ARP request")
     # -c 또는 --count 플래그는 ARP 요청을 보낼 횟수를 지정하며, 기본값은 1회로 설정
-    parser.add_argument("-c", "--count", type=int, default=1, help="ARP 요청을 보낼 횟수 (기본값: 1회)")
+    parser.add_argument("-c", "--count", type=int, default=1, help="Number of ARP requests to send (default: 1)")
+    # -t 플래그는 사용자가 중지할 때까지 ARP 요청을 지속적으로 보냄
+    parser.add_argument("-t", "--continuous", action="store_true", help="Send ARP requests continuously until stopped")
     args = parser.parse_args()
     
     # ARP 요청을 전송하는 함수를 호출
-    send_arp_request(args.target_ip, args.count)
+    send_arp_request(args.target_ip, args.count, args.continuous)