2016-06-03 4 views
1

Я пытаюсь найти все доступные порты для подключения компьютера. Я использую коды нижеPython psutil найти доступные порты

import psutil 
for proc in psutil.process_iter(): 
    print (proc) 
    for x in proc.connections(): 
     if x.status == psutil.CONN_LISTEN: 
      print (x) 

print(proc) печатает все процессы, как psutil.Process(pid=5808, name='pythonw.exe') и так далее. Мой первый вопрос: что такое pid переменная? Это порт?

Во-вторых, когда я print (x) я получаю выход как pconn(fd=-1, family=<AddressFamily.AF_INET: 2>, type=1, laddr=('xxx.x.x.x', xxxxx), raddr=(), status='LISTEN') я понял, что laddr стоит на локальный адрес, но то, что другие номера laddr? «xxx.x.x.x» выглядит как IP-адрес, но на некоторых выходах он пуст, цифр нет. Также вторая переменная laddr иногда составляет 3 цифры, иногда 5 цифр. Для чего стоят эти цифры?

И мой последний вопрос, я нахожусь на правильном пути для поиска открытых портов? Я пытаюсь подключить компьютер, поэтому сначала пытаюсь найти открытые порты.

ответ

1

A pid - это «идентификатор процесса», каждый процесс, запущенный в вашей системе, имеет уникальный идентификатор, поэтому вы можете отрегулировать его параметры или отправлять его по мере его запуска, как «завершать», «останавливать», «продолжать», ,

laddr=('xxx.x.x.x', xxxxx) является кортежем IP-адреса и номера порта.

Запуск в моей системе я получаю следующие примеры:

laddr=('127.0.0.1', 3128) - прослушивание IPv4 LOCALHOST/только шлейф, на порту 3128

laddr=('::1', 3128) - прослушивание IPv6 LOCALHOST/шлейф на порт 3128

laddr=('0.0.0.0', 80) - прослушивание любого IPv4-адреса, порт 80 (http)

laddr=('::', 80) - прослушивание любого IPv6-адреса, порт 80 (http)

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

+0

Так, например, я могу подключиться к компьютеру через эти номера портов, например: 3128? У меня есть IP-адрес, поэтому я просто проверяю наличие доступного порта для подключения. – GLHF

+0

Если вы используете это на компьютере А, вы получаете порты, которые используются на компьютере А, поэтому он может рассказать вам, какой IP-адрес и комбинацию портов вы можете подключить на компьютере А из другого места.Если вы выполняете исходящее соединение с computerA, вам не нужно беспокоиться о свободных/используемых портах на нем, просто подключиться к –

+0

. Я действительно попробую его в командной строке с помощью telnet [IP ADDRESS] [PORT ] 'с помощью этой команды. У меня также есть сценарий, который, по моему мнению, делает подключение telnet довольно коротким, проверьте его: http: //paste.ubuntu.com/16967685/. Поэтому мне показалось, что мне нужен номер порта, потому что этим методам нужен открытый порт. – GLHF

0

Непросто «подключиться» к «открытому» порту. Когда порт открыт, любая программа, открытая, порт прослушивает этот порт.

Если вы хотите найти свободные порты, ваш скрипт работает в обратном порядке! Вы должны искать порты, которые не используются. У вас не может быть двух программ, работающих на одном и том же порту. Все порты 1-65535 доступны для открытия.

Если вы хотите общаться по сети, вам придется написать программу, которая находится на компьютере A, который будет прослушивать порт. Затем у вас есть компьютер B, чтобы открыть соединение с компьютером A на указанном порту. На этом этапе любые данные, которые вы пишете из B, будут отправлены в программу, запущенную на A.

+0

Так что в основном я должен запустить сценарий на компьютере A, собрать его порт, а затем, когда я использую 'telnet [IP ADDRESS] [PORT]' в командной строке моего компьютера, я могу общаться с компьютером A. Я прав ? – GLHF

+0

Да, если этот сценарий, который вы написали, может интерпретировать telnet. –