Nano Hash - криптовалюты, майнинг, программирование

Как узнать, с каким внешним IP-адресом связан порт - Python

У меня есть скрипт сканера портов, который сканирует порты и сообщает вам, открыты они или закрыты. Есть ли способ увидеть IP-адреса, с которыми обмениваются данными порты? Сценарий:

from threading import Thread
import socket
host = str(input('host > '))
from_port = int(input('start scan from port > '))
to_port = int(input('finish scan to port > '))
counting_open = []
counting_close = []
threads = []

def scan(port):
    s = socket.socket()
    result = s.connect_ex((str(host),port))
    print(('checking ports > '+(str(port))))
    if result == 0:
        counting_open.append(port)
        print((str(port))+' -> is open')
        peer = s.getpeername()
        print(peer)
        s.close()
    else:
        counting_close.append(port)
        #print((str(port))+' -> is closed')
        s.close()

for i in range(from_port, to_port+1):
    t = Thread(target=scan, args=(i,))
    threads.append(t)
    t.start()

[x.join() for x in threads]

print(counting_open)

РЕДАКТИРОВАТЬ: Чтобы быть ясным, я не запрашивал IP-адрес локального хоста, который вводится пользователем. Я спрашивал, есть ли способ узнать, какие внешние общедоступные IP-адреса связываются с хостом через порты, обнаруженные после запуска сценария.


  • РЕДАКТИРОВАТЬ: stackoverflow.com/questions/9481419/ 03.10.2017
  • Этот пост запрашивает собственный внешний IP-адрес машины. Я спрашиваю внешние IP-адреса того, с чем машина обменивается данными на определенных портах. @ cᴏʟᴅsᴘᴇᴇᴅ 03.10.2017
  • Получить сначала локальный IP-адрес, а затем получить общедоступный IP-адрес? 03.10.2017
  • У меня уже есть локальный IP-адрес, введенный пользователем. Но, например, если я узнал, что на IP-адресе 192.168.1.45 порты 1, 2 и 3 открыты, я хотел бы знать, с чем эти порты обмениваются данными. Если это другой компьютер, может быть, публичный IP-адрес этого компьютера? 03.10.2017

Ответы:


1

Используйте getpeername.

>>> s.getpeername()
('207.38.86.25', 80)

Для всех, кто задается этим вопросом, кто хочет получить IP-адрес веб-сайта без предварительного создания объекта сокета, вы также можете использовать socket.gethostbyname (hostname) вот так:

def get_ip_address(host):
    try:
        return socket.gethostbyname(host)
    except:
         return None
03.10.2017
  • Спасибо, но я не это имел в виду. Я хотел знать, какие внешние IP-адреса передаются через определенные порты. Например, когда я запускаю сценарий и ввожу хост как 192.168.1.22 и просматриваю порты 1-100, он может сказать, что порты 4,12 и 88 открыты. Как проверить, какие внешние IP-адреса связываются с хостом (192.168.1.22) через порты 4, 12 и 88? 03.10.2017
  • Спасибо, мистер Я. Это по-прежнему выводит локальный хост с открытыми портами. Не могли бы вы взглянуть на мой код, чтобы убедиться, что я правильно использовал s.getpeername ()? 03.10.2017
  • Хм. Я не знаю, как получить внешний IP-адрес. Мне придется немного покопаться и посмотреть, смогу ли я найти решение. 03.10.2017
  • Если бы вы могли это сделать, было бы замечательно! Я потратил больше часа, пытаясь найти решение для этого. 03.10.2017
  • Если вам нужно получить только IP-адрес localhost, вы можете использовать такую ​​службу, как ipapi.co/ip. чтобы получить ваш внешний IP-адрес. Вы бы сделали что-нибудь вроде external_ip = urllib.request.urlopen('http://ident.me').read().decode('utf8'). 03.10.2017
  • на самом деле я имел в виду чужой IP-адрес порта, с которым я общаюсь. Например, если мой локальный IP-адрес обменивается данными, скажем, с другим ноутбуком через порт 15, мне понадобится IP-адрес этого ноутбука. 03.10.2017
  • Вот что возвращает getpeername (). Документы говорят, что он возвращает удаленный адрес, к которому подключен сокет. На компьютере в той же сети, что и я, это возвращает локальный IP-адрес, а для компьютеров вне моей сети я получаю внешний IP-адрес. В любом случае, это IP-адрес, который я бы использовал для связи с компьютером. 03.10.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..