#python #python-3.x #list #csv #for-loop
#python #python-3.x #Список #csv #for-цикл
Вопрос:
У меня есть CSV-файл с адресами хостов в столбце и портами для них в строках, я хотел бы просмотреть столбцы, а затем просканировать соответствующие порты в строке.
Я придумал этот код, это работает, если я вручную использую ячейку с IP-адресом и портом хоста.
import socket
import csv
lst = [1,2,3,4,5,6,7,8,9]
line_number = 0
while line_number < len(lst):
line_number = int(line_number 1)
with open('temp.csv', 'rt') as f:
mycsv = csv.reader(f)
mycsv = list(mycsv)
h = mycsv[line_number][0]
line_number = int(line_number 1)
while line_number < len(lst):
line_number = int(line_number 1)
with open('temp.csv', 'rt') as f:
mycsv = csv.reader(f)
mycsv = list(mycsv)
p = mycsv[line_number][2]
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host = h
port = int(p)
def portScanner(port):
if s.connect_ex((host, port)):
print("Closed")
else:
print("Open")
portScanner(port)
Пример CSV
ip,port
1.1.1.1,80,443,22
2.2.2.2,80,21,22
3.3.3.3,111,22,21
.
.
.
.
Спасибо!
Ответ №1:
Сначала пропустите использование заголовка next()
. Затем вы можете прочитать каждую строку, сначала взяв ip
адрес, а затем прочитав все остальные записи, ports
используя *
оператор Python. Например:
Например:
import csv
import socket
def portScanner(ip, port):
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
if s.connect_ex((ip, port)):
print(f" Port {port}: Closed")
else:
print(f" Port {port}: Open")
with open('temp.csv') as f_input:
csv_input = csv.reader(f_input)
header = next(csv_input)
for ip, *ports in csv_input:
print(f"IP: {ip}")
for port in ports:
portScanner(ip, int(port))
Комментарии:
1. Спасибо за ваш быстрый ответ и извините за то, что здесь не ясно, я новичок в python. Теперь я получаю сообщение об ошибке: ValueError: недопустимый литерал для int() с базой 10: ‘1.1.1.1’ Я посмотрел онлайн, и все рекомендовали сделать его плавающим, но это тоже не помогло. Я также безуспешно пытался импортировать модуль ipaddress. Еще раз спасибо за вашу помощь!
2. Я обновил решение, теперь я вижу, каков фактический формат вашего файла CSV