Как определить личность компьютера с Windows? - PullRequest
2 голосов
/ 22 мая 2009

У меня есть программа, состоящая из сервера и клиентских процессов. Оба работают в системах Windows - Windows 2000 или более поздних версиях. Эти два процесса могут выполняться на одной и той же машине или на двух разных машинах.

Как клиент может определить, запущен ли он на той же машине, что и сервер? Если сервер не запущен, клиент все равно не может работать и ему все равно, где находится сервер, так что об этом не может быть и речи. Я слышал, что на каждой машине с Windows есть UUID - могу ли я получить его и использовать для этой цели?

Ответы [ 3 ]

2 голосов
/ 22 мая 2009

Предыдущий вопрос о создании уникального идентификатора компьютера , который может помочь. Ссылка на предыдущий ответ, в котором упоминается MachineGUID

Нетрудно добавить API к серверу, который сообщает имя своего компьютера. Переменная окружения - COMPUTERNAME. Клиент может это проверить, верно?

Вам нужно разобраться с любым из этих случаев?

  1. Клиент работает, но сервер не отвечает, и вы хотите знать, находится ли сервер, не отвечающий на запросы, на удаленной машине.
  2. Клиент и сервер работают в двух разных виртуальных машинах на одном хост-компьютере, и вы хотите сообщить об этом как "работающие на одной машине".
  3. Клиент работает на виртуальной машине, размещенной на той же машине, на которой работает сервер, и вы хотите сообщить об этом как "работающей на той же машине".
  4. Клиент и сервер работают в несогласованных сетях, и им обоим может быть присвоено одно и то же имя.
  5. Сервер, возможно, враждебен и попытается обмануть клиента.

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

2 голосов
/ 22 мая 2009

Для работы в сети Windows имена компьютеров должны быть уникальными, поэтому достаточно вызвать API GetComputerName и иметь имена подкачки клиента и сервера (и сравнить полученное имя с именем, которое они видят). Если клиент и сервер могут запускаться независимо друг от друга, вам понадобится какой-то протокол для этого процесса. Логично, что клиент инициирует обмен, а сервер отправляет свое имя только тогда, когда он получил имя от клиента. Затем клиент может прервать соединение, если видит то же имя.

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

1 голос
/ 22 мая 2009

как насчет попытки установить петлевое соединение TCP? или, возможно, проверка файла блокировки, созданного сервером в предопределенной папке ...

Я не знаю точно, как, но в Win32 наверняка есть что-то эквивалентное файловой системе / proc в Unix (я думаю, что есть бесплатные замены для менеджера задач Windows, возможно, вы могли бы посмотреть их источники), где вы могли бы искать для вашего серверного процесса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...