Upload files to "/"
This commit is contained in:
commit
46e30c3717
58
scan.py
Normal file
58
scan.py
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
import ipaddress
|
||||||
|
import subprocess
|
||||||
|
import argparse
|
||||||
|
from concurrent.futures import ThreadPoolExecutor, as_completed
|
||||||
|
|
||||||
|
# Lista OID-ów do sprawdzenia (etykieta => OID)
|
||||||
|
oids = {
|
||||||
|
"sysName": "1.3.6.1.2.1.1.5.0",
|
||||||
|
"sysDescr": "1.3.6.1.2.1.1.1.0",
|
||||||
|
"sysLocation": "1.3.6.1.2.1.1.6.0",
|
||||||
|
"sysContact": "1.3.6.1.2.1.1.4.0"
|
||||||
|
}
|
||||||
|
|
||||||
|
def get_oid_value(ip, community, oid):
|
||||||
|
try:
|
||||||
|
result = subprocess.run(
|
||||||
|
["snmpget", "-v2c", "-c", community, str(ip), oid],
|
||||||
|
capture_output=True, text=True, timeout=2
|
||||||
|
)
|
||||||
|
if result.returncode == 0 and "STRING" in result.stdout:
|
||||||
|
return result.stdout.split("STRING:")[-1].strip()
|
||||||
|
except subprocess.TimeoutExpired:
|
||||||
|
return "Timeout"
|
||||||
|
return "Brak danych"
|
||||||
|
|
||||||
|
def query_all_oids(ip, community):
|
||||||
|
values = {name: get_oid_value(ip, community, oid) for name, oid in oids.items()}
|
||||||
|
has_data = any(val not in ("Timeout", "Brak danych") for val in values.values())
|
||||||
|
if has_data:
|
||||||
|
return (str(ip), values)
|
||||||
|
return None
|
||||||
|
|
||||||
|
def main():
|
||||||
|
parser = argparse.ArgumentParser(description="Skaner SNMP dla wielu podsieci.")
|
||||||
|
parser.add_argument("subnets", nargs="+", help="Podsieci w formacie CIDR (np. 10.1.1.0/24 10.2.2.0/24)")
|
||||||
|
parser.add_argument("-c", "--community", default="public", help="SNMP community (domyślnie: public)")
|
||||||
|
args = parser.parse_args()
|
||||||
|
|
||||||
|
ips = []
|
||||||
|
for subnet in args.subnets:
|
||||||
|
try:
|
||||||
|
ips.extend(ipaddress.IPv4Network(subnet))
|
||||||
|
except ValueError:
|
||||||
|
print(f"Błędny format podsieci: {subnet}")
|
||||||
|
|
||||||
|
print(f"{'IP':<15} {'sysName':<25} {'sysDescr':<40} {'sysLocation':<25} {'sysContact'}")
|
||||||
|
print("-" * 130)
|
||||||
|
|
||||||
|
with ThreadPoolExecutor(max_workers=6) as executor:
|
||||||
|
futures = {executor.submit(query_all_oids, ip, args.community): ip for ip in ips}
|
||||||
|
for future in as_completed(futures):
|
||||||
|
result = future.result()
|
||||||
|
if result:
|
||||||
|
ip_str, values = result
|
||||||
|
print(f"{ip_str:<15} {values['sysName']:<25} {values['sysDescr']:<40} {values['sysLocation']:<25} {values['sysContact']}")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
Loading…
x
Reference in New Issue
Block a user