लैन आईपी स्कैनर
LAN IP स्कैनर
यह पायथन स्क्रिप्ट सक्रिय IP पतों के लिए एक स्थानीय नेटवर्क को स्कैन करता है। यह जांचने के लिए कि क्या कोई होस्ट पहुँचा जा सकता है, ping
कमांड का उपयोग करता है और स्कैनिंग प्रक्रिया को गति देने के लिए मल्टीथ्रेडिंग का उपयोग करता है। सिस्टम को अभिभूत करने से बचने के लिए एक सेमाफोर एक साथ चलने वाले थ्रेड्स की संख्या को सीमित करता है। स्क्रिप्ट इनपुट के रूप में एक नेटवर्क पता (जैसे, “192.168.1.0/24”) लेती है और प्रिंट करती है कि नेटवर्क में प्रत्येक IP पता चालू है या बंद।
यह स्क्रिप्ट सक्रिय IP पतों के लिए स्कैन करके नेटवर्क पर उपकरणों की पहचान करने में मदद करती है, जैसे कि वायर्ड ब्रिज मोड में काम करने वाला TP-LINK मेष राउटर।
import subprocess
import ipaddress
import threading
import os
import socket
import argparse
MAX_THREADS = 50 # अधिकतम उपयोग किए जाने वाले थ्रेड्स की संख्या
def is_host_up(host, port=None):
"""
यह जांचता है कि पिंग या टेलनेट का उपयोग करके कोई होस्ट चालू है या नहीं।
यदि पोर्ट निर्दिष्ट है, तो यह जांचने के लिए कि पोर्ट खुला है या नहीं, टेलनेट का उपयोग करता है।
अन्यथा, पिंग का उपयोग करता है।
यदि होस्ट चालू है तो True देता है, अन्यथा False।
"""
if port:
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.settimeout(1)
result = sock.connect_ex((host, port))
if result == 0:
return True
else:
return False
except socket.error as e:
return False
finally:
sock.close()
else:
try:
# -c 1: केवल 1 पैकेट भेजें
# -W 1: प्रतिक्रिया के लिए 1 सेकंड प्रतीक्षा करें
subprocess.check_output(["ping", "-c", "1", "-W", "1", host], timeout=1)
return True
except subprocess.CalledProcessError:
return False
except subprocess.TimeoutExpired:
return False
def scan_ip(ip_str, up_ips, port=None):
"""
एकल IP पते को स्कैन करता है और उसकी स्थिति प्रिंट करता है।
"""
if is_host_up(ip_str, port):
print(f"{ip_str} is up")
up_ips.append(ip_str)
else:
print(f"{ip_str} is down")
def scan_network(network, port=None):
"""
थ्रेड्स का उपयोग करके लाइव होस्ट के लिए एक नेटवर्क स्कैन करता है, एक साथ चलने वाले थ्रेड्स की संख्या को सीमित करता है।
"""
print(f"Scanning network: {network}")
threads = []
semaphore = threading.Semaphore(MAX_THREADS) # एक साथ चलने वाले थ्रेड्स की संख्या को सीमित करें
up_ips = []
def scan_ip_with_semaphore(ip_str):
semaphore.acquire()
try:
scan_ip(ip_str, up_ips, port)
finally:
semaphore.release()
for ip in ipaddress.IPv4Network(network):
ip_str = str(ip)
thread = threading.Thread(target=scan_ip_with_semaphore, args=(ip_str,))
threads.append(thread)
thread.start()
for thread in threads:
thread.join()
return up_ips
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="लाइव होस्ट के लिए एक नेटवर्क स्कैन करें।")
parser.add_argument("network", nargs='?', default="192.168.1.0/24", help="स्कैन करने के लिए नेटवर्क (जैसे, 192.168.1.0/24)")
parser.add_argument("-p", "--port", type=int, help="जाँचने के लिए पोर्ट (वैकल्पिक)")
args = parser.parse_args()
network_to_scan = args.network
port_to_scan = args.port
up_ips = scan_network(network_to_scan, port_to_scan)
print("\nलाइव IPs:")
for ip in up_ips:
print(ip)
स्थानीय IPs को बाईपास करना
स्क्रिप्ट सक्रिय IP पतों की पहचान करती है। उचित नेटवर्क संचार सुनिश्चित करने के लिए, सत्यापित करें कि प्रॉक्सी सेटिंग्स इन स्थानीय IPs को बाईपास करने के लिए कॉन्फ़िगर की गई हैं।
192.168.0.0/16,10.0.0.0/8,172.16.0.0/12,127.0.0.1,localhost,*.local,timestamp.apple.com,sequoia.apple.com,seed-sequoia.siri.apple.com, 192.168.1.0/16
सबनेट मास्क
मेरी दूसरी मशीन आमतौर पर 192.168.1.16 पर होती है।
इसलिए यह नीचे दिए गए कमांड का उपयोग करके काम करता है।
python scripts/ip_scan.py 192.168.1.0/27 -p 22
क्योंकि 32 - 27 = 5, 2^5 = 32, इसलिए यह 192.168.1.0
से 192.168.1.31
तक प्रयास करेगा।
लेकिन यह 192.168.1.0/28
का उपयोग करते समय काम नहीं करता है, क्योंकि 2^4 = 16, इसलिए यह 192.168.1.0
से 192.168.1.15
तक प्रयास करेगा, जो 192.168.1.16
को कवर नहीं करता है।