ipconfig средствами VB.NET

Язык Visual Basic на платформе .NET.

Модераторы: Ramzes, Sebas

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

ipconfig средствами VB.NET

Сообщение student-uni » 03.11.2006 (Пт) 18:32

запустив ipconfig можно узнать например у какого (запущенного) ВПН какой виртуальный интерфейс и какой динамически полученный Ай Пи.

А можно ли это же узнать средствами VB.NEt 2005 ?

Пространство имён Network даёт всю информацию о интерфейсах, даже динамически полученный АйПи (UnicastAdresse), но не даёт инфо о том какое удалённое соединение создало это интерфейс.

RASENTRYNAME наоборот - позволяет получить имеющиеся удалённый соединения, но нет никакой информации о виртуальных интерфйесах и полученных ими ай пи адресах. (но это и понятно, пока нет соединения - о чём речь)

Как можно получить программно полную информацию Например
ВПН соединение myVPN1 которое соединяется с ВПН сервером 217.223.30.20 создало виртуальный интерфейс который получил IP UnicastAdresse 10.0.0.2

Спасибо

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 03.11.2006 (Пт) 18:34

Запустить ipconfig, считать с консоли, проанализировать.
Изображение

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 03.11.2006 (Пт) 18:47

а программно никак ?
а как считать с консоли ?

Спасибо

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 03.11.2006 (Пт) 19:01

Просто под рукой нет VB.NET. Можешь попробовать перевести пример из VB6
Изображение

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 03.11.2006 (Пт) 19:08

ну давай попробую а где он

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 03.11.2006 (Пт) 19:37

GSerg писал(а):На форме два текстбокса, один будет посылать команды в прогу, другой считывать. Таймер для считывания. Название проги заменить на своё
Код: Выделить всё
Option Explicit

Private Declare Function CreatePipe Lib "kernel32.dll" (ByRef phReadPipe As Long, ByRef phWritePipe As Long, ByRef lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
Private Declare Function GetStdHandle Lib "kernel32.dll" (ByVal nStdHandle As Long) As Long
Private Declare Function SetStdHandle Lib "kernel32.dll" (ByVal nStdHandle As Long, ByVal nHandle As Long) As Long
Private Declare Function LocalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal wBytes As Long) As Long
Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
Private Declare Function DuplicateHandle Lib "kernel32.dll" (ByVal hSourceProcessHandle As Long, ByVal hSourceHandle As Long, ByVal hTargetProcessHandle As Long, ByRef lpTargetHandle As Long, ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwOptions As Long) As Long
Private Declare Function GetCurrentProcess Lib "kernel32.dll" () As Long
Private Declare Function CreateProcess Lib "kernel32.dll" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByRef lpProcessAttributes As Any, ByRef lpThreadAttributes As Any, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByRef lpEnvironment As Any, ByVal lpCurrentDriectory As String, ByRef lpStartupInfo As STARTUPINFO, ByRef lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function TerminateProcess Lib "kernel32.dll" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function PeekNamedPipe Lib "kernel32.dll" (ByVal hNamedPipe As Long, ByRef lpBuffer As Any, ByVal nBufferSize As Long, ByRef lpBytesRead As Long, ByRef lpTotalBytesAvail As Long, ByRef lpBytesLeftThisMessage As Long) As Long
Private Declare Function ReadFile Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, ByRef lpNumberOfBytesRead As Long, ByRef lpOverlapped As Any) As Long
Private Declare Function WriteFile Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, ByRef lpNumberOfBytesWritten As Long, ByRef lpOverlapped As Any) As Long

Private Const DUPLICATE_SAME_ACCESS As Long = &H2

Private Const STARTF_USESHOWWINDOW As Long = &H1
Private Const STARTF_USESTDHANDLES As Long = &H100

Private Type SECURITY_ATTRIBUTES
  nLength As Long
  lpSecurityDescriptor As Long
  bInheritHandle As Long
End Type

Private Type PROCESS_INFORMATION
  hProcess As Long
  hThread As Long
  dwProcessId As Long
  dwThreadId As Long
End Type

Private Type STARTUPINFO
  cb As Long
  lpReserved As Long
  lpDesktop As Long
  lpTitle As Long
  dwX As Long
  dwY As Long
  dwXSize As Long
  dwYSize As Long
  dwXCountChars As Long
  dwYCountChars As Long
  dwFillAttribute As Long
  dwFlags As Long
  wShowWindow As Integer
  cbReserved2 As Integer
  lpReserved2 As Byte
  hStdInput As Long
  hStdOutput As Long
  hStdError As Long
End Type

Private hChildStdinRd As Long, hChildStdinWr As Long, hChildStdinWrDup As Long
Private hChildStdoutRd As Long, hChildStdoutWr As Long, hChildStdoutRdDup As Long

Private piProcInfo As PROCESS_INFORMATION


'Pipe is a operation system object that is often used for interprocess communication.
'There can be named and unnamed pipes.
'You've specified that w98 must be supported.
'w98 can create only unnamed pipes, and that pipes are single-directed (no duplex).
'So, we must create 2 pipes - to read and to write.

Private Sub Form_Load()
  Dim saAttr As SECURITY_ATTRIBUTES
 
  saAttr.nLength = Len(saAttr)
  saAttr.bInheritHandle = 1       'or child process will not get pipe handles
  saAttr.lpSecurityDescriptor = 0
 
' Create a pipe for the child process's STDOUT.
  CreatePipe hChildStdoutRd, hChildStdoutWr, saAttr, 0

' Handle inheritance is a technique through which child process gets
' handles it should get.

' Create noninheritable read handle and close the inheritable read
' handle. Child doesn't need that handle - so, it won't get it.
  DuplicateHandle GetCurrentProcess, hChildStdoutRd, GetCurrentProcess, hChildStdoutRdDup, 0, 0, DUPLICATE_SAME_ACCESS
 
  'Each handle must be closed when it's not useful any more.
  CloseHandle hChildStdoutRd

' Create a pipe for the child process's STDIN.
  CreatePipe hChildStdinRd, hChildStdinWr, saAttr, 0

' Duplicate the write handle to the pipe so it is not inherited.
  DuplicateHandle GetCurrentProcess, hChildStdinWr, GetCurrentProcess, hChildStdinWrDup, 0, 0, DUPLICATE_SAME_ACCESS
  CloseHandle hChildStdinWr

' Now create the child process.
  CreateProc

  Timer1.Enabled = True
End Sub

Private Sub CreateProc()
  Dim siStartInfo As STARTUPINFO
 
  siStartInfo.cb = Len(siStartInfo)
  siStartInfo.dwFlags = STARTF_USESHOWWINDOW Or STARTF_USESTDHANDLES
  siStartInfo.wShowWindow = 0             'completely hide child
  siStartInfo.hStdInput = hChildStdinRd   'explicitly set child's input and output handles
  siStartInfo.hStdOutput = hChildStdoutWr

' Create the child process.
  If CreateProcess(vbNullString, "crafty-19.3.exe", ByVal 0&, ByVal 0&, 1, 0, ByVal 0&, vbNullString, siStartInfo, piProcInfo) = 0 Then
    MsgBox "Cannot run Crafty!", vbCritical
    Unload Me
  End If
End Sub

Private Sub Timer1_Timer()
  Dim b() As Byte, nCount As Long, t As Long
 
  'ReadFile can block execution if there is nothing to read.
  'So, check first (PeekNamedPipe never blocks execution).
  PeekNamedPipe hChildStdoutRdDup, ByVal 0&, 0, ByVal 0&, nCount, ByVal 0&
 
  If nCount > 0 Then
    ReDim b(1 To nCount)   'allocate buffer
    ReadFile hChildStdoutRdDup, b(LBound(b)), nCount, t, ByVal 0&
    'replace different line breaks.
    'Also note that buffer is in ANSI, while VB uses Unicode. We have to explicitly convert it.
    txtOutput.Text = txtOutput.Text & StrConv(b, vbUnicode)
    txtOutput.SelStart = Len(txtOutput.Text)
  End If
End Sub

Private Sub txtInput_KeyPress(KeyAscii As Integer)
  Dim b() As Byte, t As Long
 
  If KeyAscii = vbKeyReturn Then   'when ENTER pressed...
    'convert from VB format to Crafty's
    b = StrConv(txtInput.Text & vbNewLine, vbFromUnicode)
    'send it to child.
    'child doesn't even know that it's not from keyboard...
    WriteFile hChildStdinWrDup, b(LBound(b)), UBound(b) - LBound(b) + 1, t, ByVal 0&
    txtInput.Text = vbNullString
  End If
End Sub

Private Sub Form_Unload(Cancel As Integer)
  TerminateProcess piProcInfo.hProcess, 0
  CloseHandle piProcInfo.hProcess
  CloseHandle piProcInfo.hThread
End Sub
Изображение

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 03.11.2006 (Пт) 19:44

Через WMI можно вытащить все нужные данные. Подключай System.Management и можешь баловаться с WMI.

Пример получения MAC адреса (можно в цикле посмотреть, что выводит еще, а можно и в документацию MSDN слазить).

Код: Выделить всё
Private Shared Function GetMacAddress() As String
        Dim qstring As String = "SELECT * FROM
Win32_NetworkAdapterConfiguration where IPEnabled = true"
        For Each mo As System.Management.ManagementObject In New
System.Management.ManagementObjectSearcher(qstring).Get()
            Dim macaddress As String = mo("MacAddress")
            If Not macaddress Is Nothing Then
                Return macaddress
            End If
        Next
        Return ""
    End Function
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 03.11.2006 (Пт) 19:55

Уважаемый Гайдар,
а как понять какое удалённое соединение (ВПН или ещё какое) породило этот интерфейс ?

Мак адрес и ай пи виртуального интерфейса через вб2005 вынимается легко, не понятно как зовут ВПН соединение его породившее
и/или каков Ай Пи ВПН соединения - тот ай пи что мы при настройке впн соединения вводим, (который же можно считать через RASENTRYNAME)

Спасибо

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.11.2006 (Сб) 0:04

System.Net.Networkinformation содержит классы для получене всей нужной информации
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 04.11.2006 (Сб) 0:49

System.Net.Networkinformation
смотрел

нету там возможности определить какое удалённое соединение породило виртуальный интерфейс

АйПи виртуальный - есть
Мак есть
ДНС - если есть то есть
тип протокола
тип адаптера
всё что хочешь есть, но если все эти параметры у нескольких виртуальных интерфейсов абсолютно одинаковы,
но виртуальные интерфейсы порождены разными ВПН соединениями,
то ты фиг отличишь какой кому принадлежит.

Например у двух виртуальных интерфейсов с одинаковыми Маками может быть разный ДНС, но опять же могут быть Два интерфейса с одинаковым ДНС но разными маками.

Единственное что могло бы однозначно сопоставить, это если бы можно было выбрав виртуальный интерфейс прочитать Ай Пи адрес Сервера ВПН соединения его породившего (тот ай пи который мы вводим создавая ВПН соединение). Но его нет.
А всё остальное не даёт однозначной идентификации.


Или я не прав ?

А вот ipconfig эту информацию как то выуживает и сопоставляет правильно!!!

gaidar
System Debugger
System Debugger
 
Сообщения: 3152
Зарегистрирован: 23.12.2001 (Вс) 13:22

Сообщение gaidar » 04.11.2006 (Сб) 2:13

Ну, по этому поводу Microsoft думает следующее (сюдя по имеющемуся стандартному примеру):

Код: Выделить всё
'=====================================================================
' File: IPConfig.vb


' Summary: Demonstrates how to programatically retrieve IP configuration
'          information by invoking native win32 API's using unmanaged code
'          The output is very similar to IPCONFIG.EXE utility.


'---------------------------------------------------------------------
' This file is part of the Microsoft .NET Framework SDK Code Samples.


' Copyright (C) 2000 Microsoft Corporation. All rights reserved.


'This source code is intended only as a supplement to Microsoft
'Development Tools and/or on-line documentation. See these other
'materials for detailed information regarding Microsoft code samples.


'THIS CODE AND INFORMATION ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY
'KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
'IMPLIED WARRANTIES OF MERCHANTABILITY AND/OR FITNESS FOR A
'PARTICULAR PURPOSE.
'=====================================================================


'Add the following namespaces
Imports System
Imports System.Runtime.InteropServices
Imports System.Text
Imports System.Threading
Imports Microsoft.VisualBasic.Constants
Imports Microsoft.VisualBasic.Conversion


'Constants used in the program as defined in IPExport.h and WinError.h
Public Class IPConfigConst
    Public Const MAX_ADAPTER_NAME As Integer = 128
    Public Const MAX_HOSTNAME_LEN As Integer = 128
    Public Const MAX_DOMAIN_NAME_LEN As Integer = 128
    Public Const MAX_SCOPE_ID_LEN As Integer = 256
    Public Const MAX_ADAPTER_DESCRIPTION_LENGTH As Integer = 128
    Public Const MAX_ADAPTER_NAME_LENGTH As Integer = 256
    Public Const MAX_ADAPTER_ADDRESS_LENGTH As Integer = 8
    Public Const DEFAULT_MINIMUM_ENTITIES As Integer = 32


    Public Const ERROR_BUFFER_OVERFLOW As Integer = 111
    Public Const ERROR_SUCCESS As Integer = 0
End Class


'Different Adapter types as defined in IPifcons.h
Public Class IPAdapterTypes
    Public Const MIB_IF_TYPE_OTHER As Integer = 1
    Public Const MIB_IF_TYPE_ETHERNET As Integer = 6
    Public Const MIB_IF_TYPE_TOKENRING As Integer = 9
    Public Const MIB_IF_TYPE_FDDI As Integer = 15
    Public Const MIB_IF_TYPE_PPP As Integer = 23
    Public Const MIB_IF_TYPE_LOOPBACK As Integer = 24
    Public Const MIB_IF_TYPE_SLIP As Integer = 28
End Class


'typedef struct _IP_ADAPTER_INFO
'{
'    struct _IP_ADAPTER_INFO* Next;
'    DWORD ComboIndex;
'    char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
'    char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
'    UINT AddressLength;
'    BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
'    DWORD Index;
'    UINT Type;
'    UINT DhcpEnabled;
'    PIP_ADDR_STRING CurrentIpAddress;
'    IP_ADDR_STRING IpAddressList;
'    IP_ADDR_STRING GatewayList;
'    IP_ADDR_STRING DhcpServer;
'    BOOL HaveWins;
'    IP_ADDR_STRING PrimaryWinsServer;
'    IP_ADDR_STRING SecondaryWinsServer;
'    time_t LeaseObtained;
'    time_t LeaseExpires;
'}


'declared as structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Public Structure IPAdapterInfo


    Public NextPointer As IntPtr
    Public ComboIndex As Integer


    <MarshalAs(UnmanagedType.ByValTStr,
SizeConst:=IPConfigConst.MAX_ADAPTER_NAME_LENGTH + 4)> _
    Public AdapterName As String


    <MarshalAs(UnmanagedType.ByValTStr,
SizeConst:=IPConfigConst.MAX_ADAPTER_DESCRIPTION_LENGTH + 4)> _
    Public Description As String


    Public AddressLength As Integer


    <MarshalAs(UnmanagedType.ByValArray,
SizeConst:=IPConfigConst.MAX_ADAPTER_ADDRESS_LENGTH)> _
    Public Address() As Byte


    Public Index As Integer
    Public Type As Integer
    Public DhcpEnabled As Integer
    Public CurrentIPAddress As IntPtr
    Public IPAddressList As IPAddrString
    Public GatewayList As IPAddrString
    Public DhcpServer As IPAddrString
    Public HaveWins As Boolean
    Public PrimaryWinsServer As IPAddrString
    Public SecondaryWinsServer As IPAddrString
    Public LeaseObtained As Integer
    Public LeaseExpires As Integer
End Structure


'typedef struct _IP_ADDR_STRING
'{
'    struct _IP_ADDR_STRING* Next;
'    IP_ADDRESS_STRING IpAddress;
'    IP_MASK_STRING IpMask;
'    DWORD Context;
'}


'declared as structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Public Structure IPAddrString


    Public NextPointer As IntPtr


    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4 * 4)> _
    Public IPAddressString As String


    <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=4 * 4)> _
    Public IPMaskString As String


    Public Context As Integer
End Structure


'typedef struct _IP_ADAPTER_INDEX_MAP
'{
'    ULONG Index // adapter index
'    WCHAR Name [MAX_ADAPTER_NAME]; // name of the adapter
'}


'declared as structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Public Structure IPAdapterIndexMap


    Public Index As Integer


    <MarshalAs(UnmanagedType.ByValTStr, _
    SizeConst:=IPConfigConst.MAX_ADAPTER_NAME)> _
    Public Name As String
End Structure


'typedef struct _IP_INTERFACE_INFO
'{
'    LONG NumAdapters; // number of adapters in array
'    IP_ADAPTER_INDEX_MAP Adapter[1]; // adapter indices and names
'}


'declared as structure
<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Auto)> _
Public Structure IPInterfaceInfo


    Public NumAdapters As Integer
    Public Adapter As IPAdapterIndexMap
End Structure


'typedef struct
'{
'    char HostName[MAX_HOSTNAME_LEN + 4] ;
'    char DomainName[MAX_DOMAIN_NAME_LEN + 4];
'    PIP_ADDR_STRING CurrentDnsServer;
'    IP_ADDR_STRING DnsServerList;
'    UINT NodeType;
'    char ScopeId[MAX_SCOPE_ID_LEN + 4];
'    UINT EnableRouting;
'    UINT EnableProxy;
'    UINT EnableDns;
'}


'declared as class


<StructLayout(LayoutKind.Sequential, CharSet:=CharSet.Ansi)> _
Public Class FixedInfo


    <MarshalAs(UnmanagedType.ByValTStr,
SizeConst:=IPConfigConst.MAX_HOSTNAME_LEN + 4)> _
    Public HostName As String


    <MarshalAs(UnmanagedType.ByValTStr,
SizeConst:=IPConfigConst.MAX_DOMAIN_NAME_LEN + 4)> _
    Public DomainName As String


    Public CurrentServerList As IntPtr
    Public DnsServerList As IPAddrString
    Public NodeType As Integer


    <MarshalAs(UnmanagedType.ByValTStr,
SizeConst:=IPConfigConst.MAX_SCOPE_ID_LEN + 4)> _
    Public ScopeId As String


    Public EnableRouting As Integer
    Public EnableProxy As Integer
    Public EnableDns As Integer
End Class


'LibWrap is a class which contains invokation of the Win32 API's using
DllImport
Public Class LibWrap


    'DWORD GetNetworkParams(PFIXED_INFO pFixedInfo,PULONG pOutBufLen);
    Declare Auto Function GetNetworkParams Lib "Iphlpapi.dll" _
    (ByVal PFixedInfoBuffer As Byte(), ByRef size As Integer) As Integer


    'DWORD GetAdaptersInfo(PIP_ADAPTER_INFO pAdapterInfo,PULONG pOutBufLen);
    Declare Auto Function GetAdaptersInfo Lib "Iphlpapi.dll" _
    (ByVal PAdapterInfoBuffer As Byte(), ByRef size As Integer) As Integer


    'DWORD GetInterfaceInfo(PIP_INTERFACE_INFO pIfTable, PULONG
dwOutBufLen);
    Declare Auto Function GetInterfaceInfo Lib "Iphlpapi.dll" _
    (ByVal PIfTableBuffer As Byte(), ByRef size As Integer) As Integer


    'copymemory function has many declarations depending on the type of
parameters
    'VOID CopyMemory(PVOID Destination, CONST VOID* Source, SIZE_T Length);


    'copying from Byte[] to FixedInfo class. Passes the class as In/Out
Parameter
    Declare Auto Sub CopyMemoryFixedInfo Lib "Kernel32.dll" Alias
"CopyMemory" _
    (<Out()> ByVal dest As FixedInfo, ByVal source As Byte(), ByVal size As
Integer)


    'copying from IntPtr to IPAddrString structure
    Declare Auto Sub CopyMemoryIPAddrString Lib "Kernel32.dll" Alias
"CopyMemory" _
    (ByRef dest As IPAddrString, ByVal source As IntPtr, ByVal size As
Integer)


    'copying from Byte[] to IPAdapterInfo structure
    Declare Auto Sub CopyMemoryIPAdapterInfo Lib "Kernel32.dll" Alias
"CopyMemory" _
    (ByRef dest As IPAdapterInfo, ByVal source As Byte(), ByVal size As
Integer)


    'copying from IntPtr to IPAdapterInfo structure
    Declare Auto Sub CopyMemoryIPAdapterInfoP Lib "Kernel32.dll" Alias
"CopyMemory" _
    (ByRef dest As IPAdapterInfo, ByVal source As IntPtr, ByVal size As
Integer)


    'copying from byte to int variable
    Declare Auto Sub CopyMemoryInt Lib "Kernel32.dll" Alias "CopyMemory" _
    (ByRef dest As Integer, ByRef source As Byte, ByVal size As Integer)


    'copying from byte to IPAdapterIndexMap structure
    Declare Auto Sub CopyMemoryIPAdapterIndexMap Lib "Kernel32.dll" Alias
"CopyMemory" _
    (ByRef dest As IPAdapterIndexMap, ByRef source As Byte, ByVal size As
Integer)


    'DWORD IpReleaseAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo)
    Declare Auto Function IpReleaseAddress Lib "Iphlpapi.dll" _
    (ByRef AdapterInfo As IPAdapterIndexMap) As Integer


    'DWORD IpRenewAddress(PIP_ADAPTER_INDEX_MAP AdapterInfo)
    Declare Auto Function IpRenewAddress Lib "Iphlpapi.dll" _
    (ByRef AdapterInfo As IPAdapterIndexMap) As Integer


End Class
The difficult I’ll do right now. The impossible will take a little while. (c) US engineers in WWII
I don't always know what I'm talking about, but I know I'm right. (c) Muhammad Ali

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 04.11.2006 (Сб) 13:37

2 gaidar

Ага !

Только вот маленькое отличие

ipconfig выдаёт мне имя соединения напр " Подключение к интернет 5"
и это то что мне нужно

а приведенный Вами код выдаёт вместо имени - хэш,
который кстати меняется от раза к разу

Ethernet adapter {4BA8E11F-67EC-4951-A19A-208897A9F61E}

Попробуйте, внизу код для консольного приложения которое использует приведеные Вами классы

(Всё это можно кстати гораздо проще через System.Net.Networkinformation достать)

Но проблема не решается.
Я не могу сказать однозначно из приведенного Вами кода какой виртуальный интерфейс породило напр " Подключение к интернет 5"
или наоборот. В ipconfig /ALL - это видно, а в результатах работы этого кода вместо имени идёт Ethernet adapter {4BA8E11F-67EC-4951-A19A-208897A9F61E}




Код: Выделить всё

'Use the following syntax to get the result
'<name of the exe>.exe -l
' http://www.dotnet247.com/247reference/msgs/18/91898.aspx


Imports System.Runtime.InteropServices

Public Class App

    'define usage of the program
    Public Shared Sub usage()
        Console.WriteLine("Usage: Iprenew [ -l ] [ -r<index id> ] [-n<index id>]")
        Console.WriteLine(vbTab & "-l List adapters with corresponding index ID and other information")
        Console.WriteLine(vbTab & "-r Release IP address for adapter index         ID")
        Console.WriteLine(vbTab & "-n Renew IP address for adapter index        ID")
    End Sub

    Public Shared Sub Main(ByVal args() As String)

        'used while invoking win32 API's
        Dim retValue As Integer
        Dim size As Integer

        'for command line arguments
        Dim optList As Boolean = False
        Dim optRelease As Boolean = False
        Dim optRenew As Boolean = False
        Dim temp As String

        'to check if adapter is of type Ethernet Adapter
        Dim ifEthernet As Boolean = False

        'index for which address is released or renewed
        Dim index As Integer = 0

        'local variable
        Dim i As Integer

        If args.Length = 0 Then
            usage()
            Return
        End If

        'checking for command line arguments   
        For i = 0 To args.Length - 1
            If ((args(i).Chars(0) = "-") Or (args(i).Chars(0) = "/")) Then

                Select Case args(i).Chars(1)
                    Case "l"
                        'to list all adapter information
                        optList = True

                    Case "r"
                        'to release IP address for given index
                        optRelease = True
                        If (args(i).Length >= 2) Then
                            temp = args(i).Substring(2, args(i).Length - 2)
                            index = Int32.Parse(temp)
                        Else
                            usage()
                        End If

                    Case "n"
                        'to renew IP address for given index
                        optRenew = True
                        If (args(i).Length >= 2) Then
                            temp = args(i).Substring(2, args(i).Length - 2)
                            index = Int32.Parse(temp)
                        Else
                            usage()
                        End If

                    Case Else
                        usage()
                        Return
                End Select

            End If
        Next i

        If (optRelease Or optRenew) Then
            Console.WriteLine("Given Adapter Index : " & index)
        End If

        'print all the network adapter information
        If (optList) Then

            'since Byte[] is class, we can pass Nothing as parameter
            'to get the required buffer size
            retValue = LibWrap.GetNetworkParams(Nothing, size)

            'checking for error
            If (retValue <> IPConfigConst.ERROR_SUCCESS And _
            retValue <> IPConfigConst.ERROR_BUFFER_OVERFLOW) Then
                Console.WriteLine("Error invoking GetNetworkParams() : " + retValue)
                Return
            End If

            'creating a buffer with required size
            Dim PFixedInfoBuffer(size) As Byte

            'Invoking GetNetworkParams()
            retValue = LibWrap.GetNetworkParams(PFixedInfoBuffer, size)

            If (retValue <> IPConfigConst.ERROR_SUCCESS) Then
                Console.WriteLine("Error invoking GetNetworkParams() " + retValue)
                Return
            End If

            Dim PFixedInfo As New FixedInfo()

            'copy from the Buffer to the FIXED_INFO structure
            LibWrap.CopyMemoryFixedInfo(PFixedInfo, PFixedInfoBuffer, _
            Marshal.SizeOf(PFixedInfo))

            Console.WriteLine("Windows IP Configuration:")
            Console.WriteLine()
            Console.WriteLine(vbTab & vbTab & "HostName....................: " + _
PFixedInfo.HostName)
            Console.WriteLine(vbTab & vbTab & "DomainName..................: " + _
PFixedInfo.DomainName)

            Dim List As New IPAddrString()
            Dim ListNext As New IntPtr()

            'Linked list of IP_ADDR_STRING structures that
            'specify the set of DNS servers used by the local computer.
            Console.Write(vbTab & vbTab & "DnsServerList............... : ")
            Console.WriteLine(PFixedInfo.DnsServerList.IPAddressString)
            ListNext = PFixedInfo.DnsServerList.NextPointer
            While (ListNext.ToInt32() <> 0)
                LibWrap.CopyMemoryIPAddrString(List, ListNext, Marshal.SizeOf(List))
                Console.WriteLine(vbTab & vbTab & _
                vbTab & vbTab & vbTab & _
                vbTab & List.IPAddressString)
                ListNext = List.NextPointer
            End While
            Select Case (PFixedInfo.NodeType)

                Case 1
                    Console.WriteLine(vbTab & vbTab & "NodeType................... : Broadcast")
                Case 2
                    Console.WriteLine(vbTab & vbTab & "NodeType................... : Peer to Peer")
                Case 4
                    Console.WriteLine(vbTab & vbTab & "NodeType................... : Mixed")
                Case 8
                    Console.WriteLine(vbTab & vbTab & "NodeType................... : Hybrid")
                Case Else
                    Console.WriteLine(vbTab & vbTab & "NodeType................... : Unknown")
            End Select

            If (PFixedInfo.EnableRouting <> 0) Then
                Console.WriteLine(vbTab & vbTab & "IP RoutingEnabled.......... : Yes")
            Else
                Console.WriteLine(vbTab & vbTab & "IP Routingenabled.......... : No")
            End If

            If (PFixedInfo.EnableProxy <> 0) Then
                Console.WriteLine(vbTab & vbTab & "WINS Proxy Enabled.......... : Yes")
            Else
                Console.WriteLine(vbTab & vbTab & "WINS Proxy notenabled...... : No")
            End If


            If (PFixedInfo.EnableDns <> 0) Then
                Console.WriteLine(vbTab & vbTab & "NetBIOS Resolution Uses DNS:        Yes")
            Else
                Console.WriteLine(vbTab & vbTab & "NetBIOS Resolution UsesDNS:        No")
            End If
            Console.WriteLine()
            Console.WriteLine()

            're-intializing the size
            size = 0

            'since Byte[] is class, we can pass null as parameter
            'to get the required buffer size
            retValue = LibWrap.GetAdaptersInfo(Nothing, size)

            'checking for error
            If (retValue <> IPConfigConst.ERROR_SUCCESS And _
            retValue <> IPConfigConst.ERROR_BUFFER_OVERFLOW) Then
                Console.WriteLine("Error invoking GetAdaptersInfo() : " + retValue)
                Return
            End If

            Dim IPAdapterInfoBuffer(size) As Byte
            Dim PAdapterInfo As New IPAdapterInfo()

            'Invoking GetAdapterInfo()
            retValue = LibWrap.GetAdaptersInfo(IPAdapterInfoBuffer, size)

            'checking for error
            If (retValue <> IPConfigConst.ERROR_SUCCESS) Then
                Console.WriteLine("Error invoking GetAdaptersInfo() : " + retValue)
                Return
            End If

            'copy from the Buffer to the IP_ADAPTER_INFO structure
            LibWrap.CopyMemoryIPAdapterInfo(PAdapterInfo, IPAdapterInfoBuffer, _
    Marshal.SizeOf(PAdapterInfo))

            'pointing next block for IP_ADAPTER_INFO
            Dim AdapterInfoNext As New IntPtr()

            Do
                Select Case PAdapterInfo.Type
                    Case IPAdapterTypes.MIB_IF_TYPE_ETHERNET
                        Console.Write("Ethernet adapter ")
                        ifEthernet = True

                    Case IPAdapterTypes.MIB_IF_TYPE_TOKENRING
                        Console.Write("Token Ring adapter ")

                    Case IPAdapterTypes.MIB_IF_TYPE_FDDI
                        Console.Write("FDDI adapter ")

                    Case IPAdapterTypes.MIB_IF_TYPE_PPP
                        Console.Write("PPP adapter ")

                    Case IPAdapterTypes.MIB_IF_TYPE_LOOPBACK
                        Console.Write("Loopback adapter ")

                    Case IPAdapterTypes.MIB_IF_TYPE_SLIP
                        Console.Write("Slip adapter ")

                    Case IPAdapterTypes.MIB_IF_TYPE_OTHER
                        Console.Write("Other type of adapter")

                    Case Else
                        Console.Write("Other adapter ")
                End Select
                Console.WriteLine(PAdapterInfo.AdapterName & vbCr)
                Console.WriteLine(vbTab & vbTab & "AdapterIndex............... : " + _
    PAdapterInfo.Index.ToString())
                Console.WriteLine(vbTab & vbTab & "Description................. : " + _
    PAdapterInfo.Description)
                Console.Write(vbTab & vbTab & "Physical Address............: ")

                Dim l As Integer
                For l = 0 To PAdapterInfo.AddressLength - 1
                    If (l = PAdapterInfo.AddressLength - 1) Then
                        Console.WriteLine(Hex(PAdapterInfo.Address(l)))
                    Else
                        Console.Write(Hex(PAdapterInfo.Address(l)) + "-")
                    End If
                Next l

                If (PAdapterInfo.DhcpEnabled <> 0) Then
                    Console.WriteLine(vbTab & vbTab & "DHCP Enabled................ : Yes")
                Else
                    Console.WriteLine(vbTab & vbTab & "DHCP Enabled................ : No")
                End If

                'IP Address list
                Console.WriteLine(vbTab & vbTab & "IPAddress.................. : " + _
    PAdapterInfo.IPAddressList.IPAddressString)
                Console.WriteLine(vbTab & vbTab & "Subnet Mask................. : " + _
    PAdapterInfo.IPAddressList.IPMaskString)
                Dim PIPList As New IntPtr()
                PIPList = PAdapterInfo.IPAddressList.NextPointer
                Dim IPAddressList As New IPAddrString()
                While (PIPList.ToInt32() <> 0)
                    LibWrap.CopyMemoryIPAddrString(IPAddressList, PIPList, _
                    Marshal.SizeOf(IPAddressList))
                    Console.WriteLine(vbTab & vbTab & "IPAddress.................. : " _
    + IPAddressList.IPAddressString)
                    Console.WriteLine(vbTab & vbTab & "SubnetMask................. : " _
    + IPAddressList.IPMaskString)
                    PIPList = IPAddressList.NextPointer
                End While

                'Gateway List                   
                Console.WriteLine(vbTab & vbTab & " Default Gateway............. : " + PAdapterInfo.GatewayList.IPAddressString)
                Dim PGateway As New IntPtr()
                PGateway = PAdapterInfo.GatewayList.NextPointer
                Dim IPGatewayList As New IPAddrString()
                While (PGateway.ToInt32 <> 0)
                    LibWrap.CopyMemoryIPAddrString(IPGatewayList, PGateway, Marshal.SizeOf(IPGatewayList))
                    Console.WriteLine(vbTab & vbTab & "GatewayAddress............. : " + IPGatewayList.IPAddressString)
                    PGateway = IPGatewayList.NextPointer
                End While

                Console.WriteLine(vbTab & vbTab & "DHCP Server................. : " + PAdapterInfo.DhcpServer.IPAddressString)
                Console.WriteLine(vbTab & vbTab & "Primary WINS Server......... : " + PAdapterInfo.PrimaryWinsServer.IPAddressString)
                Console.WriteLine(vbTab & vbTab & "Gateway Address............. : " + PAdapterInfo.SecondaryWinsServer.IPAddressString)

                'date and time when Lease is obtained and expired
                If (ifEthernet) Then

                    Dim LeaseObt = New DateTime(1970, 1, 1)
                    Dim LeaseExp = New DateTime(1970, 1, 1)
                    LeaseObt = LeaseObt.AddSeconds(PAdapterInfo.LeaseObtained)
                    LeaseExp = LeaseExp.AddSeconds(PAdapterInfo.LeaseExpires)

                    Console.WriteLine(vbTab & vbTab & "Lease Obtained.............. : " + LeaseObt.ToString())
                    Console.WriteLine(vbTab & vbTab & "Lease Expires............... : " + LeaseExp.ToString())
                End If

                'setting it to next Adapter information
                AdapterInfoNext = PAdapterInfo.NextPointer

                If (AdapterInfoNext.ToInt32 <> 0) Then
                    LibWrap.CopyMemoryIPAdapterInfoP(PAdapterInfo, AdapterInfoNext, Marshal.SizeOf(PAdapterInfo))
                End If
                Console.WriteLine()
                Console.WriteLine()

            Loop While (AdapterInfoNext.ToInt32 <> 0)
            'Depending on the number of adapters
        End If

        'Re-initializing the size
        size = 0

        'if IP Release or Renew
        If (optRelease Or optRenew) Then

            'since Byte[] is class, we can pass null as parameter
            'to get the required buffer size
            LibWrap.GetInterfaceInfo(Nothing, size)

            'Checking for error
            If (retValue <> IPConfigConst.ERROR_SUCCESS And _
            retValue <> IPConfigConst.ERROR_BUFFER_OVERFLOW) Then
                Console.WriteLine("Error invoking GetInterfaceInfo() : " + retValue)
                Return
            End If

            Dim PIfTableBuffer(size) As Byte
            Dim PIfTable As New IPInterfaceInfo()

            'invoking GetInterfaceInfo()
            retValue = LibWrap.GetInterfaceInfo(PIfTableBuffer, size)

            'checking for error
            If (retValue <> IPConfigConst.ERROR_SUCCESS) Then
                Console.WriteLine("Error Value from GetInterfaceInfo(): " + retValue)
                Return
            End If

            Dim NumAdapters As Integer = 0
            Dim byteCount As Integer = 0

            'copy from PIfTableBuffer to NumAdapters
            LibWrap.CopyMemoryInt(NumAdapters, PIfTableBuffer(byteCount), 4)

            byteCount = byteCount + 4

            If (NumAdapters = 0) Then
                Console.WriteLine("No Adpaters found")
                Return
            End If

            Dim PIPAdapterIndexMap As New IPAdapterIndexMap()

            For i = 0 To NumAdapters - 1
                'copy from PIfTableBuffer to IP_ADAPTER_INDEX_MAP Structure
                LibWrap.CopyMemoryIPAdapterIndexMap(PIPAdapterIndexMap, PIfTableBuffer(byteCount), Marshal.SizeOf(PIPAdapterIndexMap))
                byteCount = byteCount + Marshal.SizeOf(PIPAdapterIndexMap)

                'checking for index number
                If (index = PIPAdapterIndexMap.Index) Then

                    'if IP Release
                    If (optRelease) Then

                        retValue = LibWrap.IpReleaseAddress(PIPAdapterIndexMap)
                        If (retValue <> IPConfigConst.ERROR_SUCCESS) Then
                            Console.WriteLine("Error invoking IPRelease: " & retValue)
                            Return
                        End If

                        Console.WriteLine("IP Address Released....")
                    End If

                    'if IP Renew
                    If (optRenew) Then

                        retValue = LibWrap.IpRenewAddress(PIPAdapterIndexMap)
                        If (retValue <> IPConfigConst.ERROR_SUCCESS) Then
                            Console.WriteLine("Error invoking IPRenew: " & retValue)
                            Return
                        End If

                        Console.WriteLine("IP Address Renewed....")
                    End If
                End If

            Next i
        End If

    End Sub

End Class



Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 04.11.2006 (Сб) 23:57

Какую строчку из IPCONIG тебе нужно получить?
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 05.11.2006 (Вс) 11:21

Первую, имя соединения

Адаптер Ethernet Подключение по локальной сети 5:


Настройка протокола IP для Windows 2000

Адаптер Ethernet Подключение по локальной сети 5:

DNS суффикс этого подключения . . :
IP-адрес . . . . . . . . . . . . : 192.168.123.254
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз . . . . . . . . . . : 192.168.123.1

Адаптер Ethernet Подключение по локальной сети:

Состояние устройства . . . . . . : отсоединен кабель

Адаптер Ethernet Подключение по локальной сети 4:

DNS суффикс этого подключения . . :
IP-адрес . . . . . . . . . . . . : 192.168.179.20
Маска подсети . . . . . . . . . . : 255.255.255.0
Основной шлюз . . . . . . . . . . :

Sebas
Неуловимый Джо
Неуловимый Джо
Аватара пользователя
 
Сообщения: 3626
Зарегистрирован: 12.02.2002 (Вт) 17:25
Откуда: столько наглости такие вопросы задавать

Сообщение Sebas » 05.11.2006 (Вс) 18:44

Public MustOverride ReadOnly Property Name() As String
Member of: System.Net.NetworkInformation.NetworkInterface
Summary:
Gets the name of the network adapter.

Return Values:
A System.String that contains the adapter name.


+


Public MustOverride ReadOnly Property NetworkInterfaceType() As System.Net.NetworkInformation.NetworkInterfaceType
Member of: System.Net.NetworkInformation.NetworkInterface
Summary:
Gets the interface type.

Return Values:
An System.Net.NetworkInformation.NetworkInterfaceType value that specifies the network interface type.
- Я никогда не понимал, почему они приходят ко мне чтобы умирать?

sebas<-@->mail.ru

student-uni
Бывалый
Бывалый
 
Сообщения: 242
Зарегистрирован: 01.10.2005 (Сб) 18:54

Сообщение student-uni » 05.11.2006 (Вс) 19:34

блин Name !!! и чего я так стормозил

Спасибо


Вернуться в Visual Basic .NET

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 1

    TopList