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

Вниз

Перечисление IP   Найти похожие ветки 

 
Dstr ©   (2006-05-10 23:09) [0]

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


 
Dstr ©   (2006-05-10 23:32) [1]

Мда,извините,но я сам уже ответил на свой вопрос:

unit TcpTable;
interface
type
 PDWord = ^Longword;
 PMIB_TCPROW = ^TMIB_TCPROW;
 TMIB_TCPROW = record
   dwState: LongWord;
   dwLocalAddr: LongWord;
   dwLocalPort: LongWord;
   dwRemoteAddr: LongWord;
   dwRemotePort: LongWord;
 end;
 PMIB_TCPTABLE = ^TMIB_TCPTABLE;
 TMIB_TCPTABLE = record
   dwNumEntries: LongWord;
   table: array[0..0] of TMIB_TCPROW;
 end;

function GetTcpTable(var TcpTable: PMIB_TCPTABLE;
 var Size: PDWord; bOrder: Boolean): LongWord; stdcall

implementation

function GetTcpTable; external "Iphlpapi.dll" name "GetTcpTable";

end.


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


 
Dstr ©   (2006-05-10 23:41) [2]

Хехе,2 ответ на мой же вопрос:

unit USock;

interface

uses
 Windows, Winsock;

{

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

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

}

function EnumInterfaces(var sInt: string): 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;

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;

implementation

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

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

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

function EnumInterfaces(var sInt: string): Boolean;
var
 s: TSocket;
 wsaD: WSADATA;
 NumInterfaces: Integer;
 BytesReturned, SetFlags: u_long;
 pAddrInet: SOCKADDR_IN;
 pAddrString: PCHAR;
 PtrA: pointer;
 Buffer: array[0..20] of INTERFACE_INFO;
 i: Integer;
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);

     for i := 0 to NumInterfaces - 1 do // Для каждого интерфейса
     begin
       pAddrInet := Buffer[i].iiAddress.addressIn; // IP адрес
       pAddrString := inet_ntoa(pAddrInet.sin_addr);
       sInt := sInt + " IP=" + pAddrString + ",";
       pAddrInet := Buffer[i].iiNetMask.addressIn; // Маска подсети
       pAddrString := inet_ntoa(pAddrInet.sin_addr);
       sInt := sInt + " Mask=" + pAddrString + ",";
       pAddrInet := Buffer[i].iiBroadCastAddress.addressIn; // Broadcast адрес
       pAddrString := inet_ntoa(pAddrInet.sin_addr);
       sInt := sInt + " Broadcast=" + pAddrString + ",";

       SetFlags := Buffer[i].iiFlags;
       if (SetFlags and IFF_UP) = IFF_UP then
         sInt := sInt + " Interface UP," // Статус интерфейса up/down
       else
         sInt := sInt + " Interface DOWN,";

       if (SetFlags and IFF_BROADCAST) = IFF_BROADCAST then // Broadcasts
         sInt := sInt + " Broadcasts supported," // поддерживает или
       else // не поддерживается
         sInt := sInt + " Broadcasts NOT supported,";

       if (SetFlags and IFF_LOOPBACK) = IFF_LOOPBACK then // Циклический или
         sInt := sInt + " Loopback interface"
       else
         sInt := sInt + " Network interface"; // нормальный

       sInt := sInt + #13#10; // CRLF между каждым интерфейсом
     end;
 end;
 except
 end;
 //
 // Закрываем сокеты
 //
 CloseSocket(s);
 WSACleanUp;
 result := false;
end;

end.


 
Windows ©   (2006-05-11 13:42) [3]

ОФТОП:
вот человек, сам вопросы задает и сам отвечает, только не понятно, что от нас хочет))))


 
Dstr ©   (2006-05-11 13:44) [4]

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



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

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

Наверх




Память: 0.47 MB
Время: 0.015 c
1-1156347510
Blacksus
2006-08-23 19:38
2006.10.01
Помогите с TStringgrid


2-1157962037
IGray
2006-09-11 12:07
2006.10.01
Я рехнулся или Delphi?


3-1153897920
Zouch
2006-07-26 11:12
2006.10.01
Диалог на подключение к БД


15-1158125183
Ega23
2006-09-13 09:26
2006.10.01
С Днём рождения! 13 сентября


15-1157957457
Neo Trinitron
2006-09-11 10:50
2006.10.01
PowerDesigner





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский