Главная страница
    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.019 c
1-1156161079
.ruslan
2006-08-21 15:51
2006.10.01
DBCheckBox как программно изменить значение


15-1157911918
sportman
2006-09-10 22:11
2006.10.01
Сеть и почта!!!


2-1158136715
worldmen
2006-09-13 12:38
2006.10.01
Вставка пароля при входе в ОС из др. проги.


2-1157734641
tvvt
2006-09-08 20:57
2006.10.01
TEdit + font size


1-1156143454
Bless
2006-08-21 10:57
2006.10.01
Закрытие формы в OnShow





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