Форум сайта python.su
Всем привет.
Пишу сниффер портов сетевого оборудования.
Суть скрипта: есть файл txt. со списком ip. Скрипт берёт ip из этого файла, проверяет его на доступность утилитой ping, если пингуется, проверяет на открытость портов, если нет, пишет что не пингуется. Вывод в csv.
Пока код такой:
import socket
import time
import telnetlib
import paramiko
import os
r = open(“C:\Python Scripts\snif\IP-ports.csv”, ‘a’)
with open(r“C:\Python Scripts\snif\IP.txt”, “r”) as f:
ipfile = f.read().split('\n')
for ip in ipfile:
time.sleep(5)
host = ip
Ping = os.system(“ping -n 1 ” + host)
if Ping == 0:
for i in (22,23,80,443):
s = socket.socket()
s.settimeout(0.5)
response = s.connect_ex((ip, i))
if response:
r.write(ip + “;”+ str(i) +“;”+ “close” + “\n”)
print (str(ip) + “ ”+ str(i) + “ ”+ “close”)
else:
r.write(ip + “;”+ str(i) +“;”+ “open” + “\n”)
print (str(ip) + “ ”+ str(i) + “ ”+“open”)
else:
r.write(ip + “;” + “;” + “;” + “no ping”+ “\n” )
s.close()
r.close()
Вывод:
Ping statistics for 10.10.10.30:
Packets: Sent = 1, Received = 1, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 9ms, Maximum = 9ms, Average = 9ms
10.10.10.30 22 open
10.10.10.30 23 close
10.10.10.30 80 open
10.10.10.30 443 open
и . д.
Теперь мне необходимо что бы вывод был в таблице в csv. файле по типу:
ip 22 23 80 443 comment
10.10.10.30 open close open open
10.10.10.20 open open close close
10.10.10.40 no ping
Подскажите новичку, как это можно сделать ?
Отредактировано Scron244 (Ноя. 12, 2021 10:34:05)
Офлайн
Scron244Это не сниффер. И сниффер сегодня не надо писать, так как есть Wireshark и tcpdump - готовые развитые программы.
Пишу сниффер портов сетевого оборудования.
Scron244
Подскажите новичку, как это можно сделать ?
>>> import csv >>> >>> strings = ['a', 'b', 'c', 'd', 'e'] >>> >>> with open('file.csv', 'w', encoding='utf-8') as fout: ... writer = csv.writer(fout) ... writer.writerow(strings) ... 11 >>>
[guest@localhost py]$ cat file.csv
a,b,c,d,e
[guest@localhost py]$
Офлайн
Установить специализированные программы нет возможности, приходиться кодить.
Проблему решил вот таким способом.
ipfile = f.read().split('\n')
for ip in ipfile:
time.sleep(5)
host = ip
Ping = os.system(“ping -n 1 ” + host)
if Ping == 0:
portout=
item = 0
for i in (22,23,80,443):
s = socket.socket()
s.settimeout(0.5)
response = s.connect_ex((ip, i))
if response:
portout.append(“close”)
print (str(ip) + “ ”+ str(i) + “ ”+ “close”)
else:
portout.append(“open”)
print (str(ip) + “ ”+ str(i) + “ ”+“open”)
item = item +1
s.close()
print(portout)
r.write(ip + “;” + portout + “;” + portout + “;” + portout + “;” + portout + “\n”)
else:
r.write(ip + “;” + “no ping”+ “\n”)
r.close()
Офлайн
Scron244Ну, есть программа такая nmap, вряд ли кто-то будет писать свой сканер, так как проще её взять.
Установить специализированные программы нет возможности
class PortScanner: def __init__(self): self.p = None def is_opened(self, address, port): args = ['nmap', '-p', str(port), address] self.p = subprocess.Popen( args, stdout=subprocess.PIPE, stderr=subprocess.PIPE) p = self.p with p: p.wait() retok = p.returncode == 0 if retok: stdout = p.communicate()[0].decode('latin1') pat = r'^{}/tcp +open +\S+$'.format(port) mobj = re.search(pat, stdout, flags=re.M) return retok and mobj is not None def terminate(self): if self.p is not None: self.p.terminate() self.p = None
Scron244И как писать csv, я тебе показал. То, как ты “пишешь csv”, - это неправильно. Это тебе только кажется, что ты понимаешь, как формат CSV устроен. Не мешало бы тебе прочитать про формат CSV всю информацию, раз уж ты взялся писать в этом формате вручную. Обязательно используй модуль питона csv.
Проблему решил вот таким способом.... r.write(ip + ";" + portout + ";" + portout + ";" + portout + ";" + portout + "\n") ...
Отредактировано py.user.next (Ноя. 12, 2021 21:21:13)
Офлайн
NMAP это конечно хорошо, но проблема в том что сервер, через который происходит управления сетью, не имеет доступа в интернет и установить какую-либо программу довольно сложно, необходимо куча согласований с СБ и т. д.. приходится все решать с помощью Питона
Отредактировано Scron244 (Ноя. 15, 2021 07:38:08)
Офлайн