Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 12, 2021 10:18:30

Scron244
Зарегистрирован: 2021-11-12
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод данных в таблицу

Всем привет.
Пишу сниффер портов сетевого оборудования.
Суть скрипта: есть файл 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)

Офлайн

#2 Ноя. 12, 2021 11:11:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Вывод данных в таблицу

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]$



Офлайн

#3 Ноя. 12, 2021 12:29:51

Scron244
Зарегистрирован: 2021-11-12
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод данных в таблицу

Установить специализированные программы нет возможности, приходиться кодить.
Проблему решил вот таким способом.

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()

Офлайн

#4 Ноя. 12, 2021 21:14:16

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9873
Репутация: +  853  -
Профиль   Отправить e-mail  

Вывод данных в таблицу

Scron244
Установить специализированные программы нет возможности
Ну, есть программа такая nmap, вряд ли кто-то будет писать свой сканер, так как проще её взять.
https://ru.wikipedia.org/wiki/Nmap
https://nmap.org/download.html

Я писал сканер портов на Python/PyQt . Так я не стал сканировать питоном, я просто питоном управлял программой nmap. И подключена она была в один из методов объекта класса PortScanner.
  
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

Я вот вижу, что пингуешь ты тоже не питоном, а используешь программу ping. Так я в той программе тоже использую программу ping, чтобы пинговать. Но я и для сканирования порта тоже программу использую. Просто делаю единообразный интерфейс, а потом делаю класс, реализующий этот интерфейс, и уже его базирую на программе. И в любой момент без каких-либо потерь я могу этот класс перебазировать на что-нибудь другое - на другую внешнюю программу или вообще на питоновские модули.

Думаю, если тебе можно поставить свой сканер в систему, то тебе будет можно поставить и nmap в систему. Бывают случаи, когда нельзя, но я думаю, что это не твой случай. Тебе бы просто сканер написать хоть какой-то.

Scron244
Проблему решил вот таким способом.
  
...
 
r.write(ip + ";" + portout + ";" + portout + ";" + portout + ";" + portout + "\n")
 
...
И как писать csv, я тебе показал. То, как ты “пишешь csv”, - это неправильно. Это тебе только кажется, что ты понимаешь, как формат CSV устроен. Не мешало бы тебе прочитать про формат CSV всю информацию, раз уж ты взялся писать в этом формате вручную. Обязательно используй модуль питона csv.



Отредактировано py.user.next (Ноя. 12, 2021 21:21:13)

Офлайн

#5 Ноя. 15, 2021 07:37:40

Scron244
Зарегистрирован: 2021-11-12
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Вывод данных в таблицу

NMAP это конечно хорошо, но проблема в том что сервер, через который происходит управления сетью, не имеет доступа в интернет и установить какую-либо программу довольно сложно, необходимо куча согласований с СБ и т. д.. приходится все решать с помощью Питона

Отредактировано Scron244 (Ноя. 15, 2021 07:38:08)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version