Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];

Вниз

Узнать название подключения по IP   Найти похожие ветки 

 
Степан   (2007-06-17 18:53) [0]

Можно ли как-нибудь узнать название подключения, через ip?


 
Eraser ©   (2007-06-17 19:12) [1]

> [0] Степан   (17.06.07 18:53)

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


 
Степан   (2007-06-17 19:56) [2]

Ну понятно, что решаемая)
только как?


 
Eraser ©   (2007-06-17 20:57) [3]

unit alxUSock;

interface

uses Windows, Winsock;

{

 Если Вы поместите строку результатов в wide TMEMO (в его свойство memo.lines.text)
 то никаких результатов не увидите.

 Тестировалось на Win98/ME/2K, 95 OSR 2 и NT service
 pack #3 , потому что используется WinSock 2 (WS2_32.DLL)

}
type sockaddr_gen = packed record
   AddressIn: sockaddr_in;
   filler: packed array[0..7] of char;
 end;

type INTERFACE_INFO = packed record
   iiFlags: u_long; // Флаги интерфейса
   iiAddress: sockaddr_gen; // Адрес интерфейса
   iiBroadcastAddress: sockaddr_gen; // Broadcast адрес
   iiNetmask: sockaddr_gen; // Маска подсети
 end;

type
 TInterfacesArray = array of INTERFACE_INFO;

function EnumInterfaces(var sInt: string;
 var InterfacesArray: TInterfacesArray): Boolean;

{ функция WSAIOCtl импортируется из Winsock 2.0 - Winsock 2 доступен }
{ только в Win98/ME/2K и 95 OSR2, NT srv pack #3 }

function WSAIoctl(s: TSocket; cmd: DWORD; lpInBuffer: PCHAR; dwInBufferLen:
 DWORD;
 lpOutBuffer: PCHAR; dwOutBufferLen: DWORD;
 lpdwOutBytesReturned: LPDWORD;
 lpOverLapped: POINTER;
 lpOverLappedRoutine: POINTER): Integer; stdcall; external "WS2_32.DLL";

{ Константы взятые из заголовка C файлов }

const SIO_GET_INTERFACE_LIST = $4004747F;
 IFF_UP = $00000001;
 IFF_BROADCAST = $00000002;
 IFF_LOOPBACK = $00000004;
 IFF_POINTTOPOINT = $00000008;
 IFF_MULTICAST = $00000010;

implementation

{-------------------------------------------------------------------

1. Открываем WINSOCK
2. Создаём сокет
3. Вызываем WSAIOCtl для доступа к сетевым интерфейсам
4. Для каждого интерфейса, получаем IP, MASK, BROADCAST, статус
5. Разделяем строку символом CRLF  
6. Конец :)

--------------------------------------------------------------------}

function EnumInterfaces(var sInt: string;
 var InterfacesArray: TInterfacesArray): Boolean;
var s: TSocket;
 wsaD: WSADATA;
 NumInterfaces: Integer;
 BytesReturned: u_long;
 pAddrInet: SOCKADDR_IN;
 pAddrString: PCHAR;
 PtrA: pointer;
 Buffer: array[0..20] of INTERFACE_INFO;
 i: Integer;
 //InterfacesArray: TInterfacesArray;
begin
 result := true;                                // Инициализируем переменную
 sInt := "";

 WSAStartup($0101, wsaD);                      // Запускаем WinSock
                                               // Здесь можно дабавить различные обработчики ошибки :)

 s := Socket(AF_INET, SOCK_STREAM, 0);          // Открываем сокет
 if (s = INVALID_SOCKET) then exit;

 try                                            // Вызываем WSAIoCtl
   PtrA := @bytesReturned;
   if (WSAIoCtl(s, SIO_GET_INTERFACE_LIST, nil, 0, @Buffer, 1024, PtrA, nil,
     nil)
     <> SOCKET_ERROR)
     then
   begin                                        // Если OK, то определяем количество существующих интерфейсов

     NumInterfaces := BytesReturned div SizeOf(INTERFACE_INFO);
     SetLength(InterfacesArray, NumInterfaces);

     for i := 0 to NumInterfaces - 1 do        // Для каждого интерфейса
     begin
       InterfacesArray[i] := Buffer[i];
       pAddrInet := Buffer[i].iiAddress.addressIn;            // IP адрес
       pAddrString := inet_ntoa(pAddrInet.sin_addr);
       sInt:=sInt+pAddrString;
       if i = NumInterfaces - 1 then
         sInt := sInt
       else
         sInt := sInt + #13#10;
       // CRLF между каждым интерфейсом
     end;
   end;
 except
 end;
//
// Закрываем сокеты
//
 CloseSocket(s);
 WSACleanUp;
 result := false;
end;

end.



Страницы: 1 вся ветка

Форум: "Сети";
Текущий архив: 2008.03.09;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.047 c
2-1202772539
Abcdef123
2008-02-12 02:28
2008.03.09
Вопрос по Exception.


3-1192953243
Evgeny
2007-10-21 11:54
2008.03.09
Ошибка SQL запросе


15-1201715595
oxffff
2008-01-30 20:53
2008.03.09
Ищу работу.


2-1202844363
kami
2008-02-12 22:26
2008.03.09
Привязать UDPClient к сетевому интерфейсу


15-1201851717
homm
2008-02-01 10:41
2008.03.09
Осторожней, Москвичи!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский