Найти - Пользователи
Полная версия: Вывод данных в таблицу
Начало » Python для новичков » Вывод данных в таблицу
1
Scron244
Всем привет.
Пишу сниффер портов сетевого оборудования.
Суть скрипта: есть файл 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

Подскажите новичку, как это можно сделать ?
py.user.next
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]$
Scron244
Установить специализированные программы нет возможности, приходиться кодить.
Проблему решил вот таким способом.

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()
py.user.next
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.
Scron244
NMAP это конечно хорошо, но проблема в том что сервер, через который происходит управления сетью, не имеет доступа в интернет и установить какую-либо программу довольно сложно, необходимо куча согласований с СБ и т. д.. приходится все решать с помощью Питона
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB