Как проверить, находится ли сокет клиент-сервер в той же сети? - PullRequest
0 голосов
/ 27 июля 2010

Я работаю с сокетом, и для этого я использую TIdTCPClient и TIdTCPServer.Мне нужно проверить, находится ли TIdTCPServer, к которому подключен TIdTCPClient, в одной сети.

Как я могу это сделать?

в.

Ответы [ 3 ]

6 голосов
/ 28 июля 2010

Вам необходимо знать маску подсети клиента, чтобы выполнить такое сравнение.Сокеты не предоставляют эту информацию, поэтому вам придется обратиться к ОС напрямую (например, в Windows вы можете найти подключенный локальный IP-адрес клиента в списке, возвращаемом GetAdaptersInfo() или GetAdapterAddresses()).Получив маску, вы можете замаскировать IP-адрес клиента и IP-адрес сервера и проверить, совпадают ли полученные значения.

1 голос
/ 27 июля 2010

Что вы имеете в виду для "той же сети"?Вы можете имитировать утилиту traceroute и проверить, сколько хопов (с их адресами маршрутизаторов), и сравнить с ожидаемыми.

0 голосов
/ 21 августа 2010

Tks для хитов, чтобы решить мой случай, мне просто нужно было проверить, является ли хост локальным или нет.

Решение:

function IsLocalHost(AHost : string) : Boolean;
var
  LStrRegexRedeLocal : string;
begin
  if LowerCase(AHost) = 'localhost' then
    result := True
  else
  begin
    LStrRegexRedeLocal := '(^10\.)|(^172\.1[6-9]\.)|(^172\.2[0-9]\.)|(^172\.3[0-1]\.)|(^192\.168\.)|(^127\.0\.0\.1)';
    result := ExecRegExpr(LStrRegexRedeLocal, AHost);
  end;
end;
...