Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Определение основного шлюза Добавлено: 30.05.05 23:07  

Автор вопроса:  Danger_Man | Web-сайт: www.florange.info | ICQ: 193871483 
Как это можно сделать?

то есть необходимо определить основной шлюз, который выводится по команде route print

Ответить

  Ответы Всего ответов: 10  

Номер ответа: 1
Автор ответа:
 Sur



ICQ: 1249088 

Вопросов: 10
Ответов: 304
 Web-сайт: sur.hotbox.ru/
 Профиль | | #1
Добавлено: 31.05.05 11:26
debug.print GetDefaultGateway()
модуль:

Option Explicit
Public Const MAX_HOSTNAME_LEN = 132
Public Const MAX_DOMAIN_NAME_LEN = 132
Public Const MAX_SCOPE_ID_LEN = 260
Public Const MAX_ADAPTER_NAME_LENGTH = 260
Public Const MAX_ADAPTER_ADDRESS_LENGTH = 8
Public Const MAX_ADAPTER_DESCRIPTION_LENGTH = 132
Public Const ERROR_BUFFER_OVERFLOW = 111
Public Const MIB_IF_TYPE_ETHERNET = 6
Public Const MIB_IF_TYPE_TOKENRING = 9
Public Const MIB_IF_TYPE_FDDI = 15
Public Const MIB_IF_TYPE_PPP = 23
Public Const MIB_IF_TYPE_LOOPBACK = 24
Public Const MIB_IF_TYPE_SLIP = 28
Type IP_ADDR_STRING
            Next As Long
            IpAddress As String * 16
            IpMask As String * 16
            Context As Long
End Type
Type IP_ADAPTER_INFO
            Next As Long
            ComboIndex As Long
            AdapterName As String * MAX_ADAPTER_NAME_LENGTH
            ;Description As String * MAX_ADAPTER_DESCRIPTION_LENGTH
            AddressLength As Long
            Address(MAX_ADAPTER_ADDRESS_LENGTH - 1) As Byte
            Index As Long
            Type As Long
            ;DhcpEnabled As Long
            CurrentIpAddress As Long
            IpAddressList As IP_ADDR_STRING
            GatewayList As IP_ADDR_STRING
            ;DhcpServer As IP_ADDR_STRING
            HaveWins As Byte
            PrimaryWinsServer As IP_ADDR_STRING
            SecondaryWinsServer As IP_ADDR_STRING
            LeaseObtained As Long
            LeaseExpires As Long
End Type
Type FIXED_INFO
            HostName As String * MAX_HOSTNAME_LEN
            ;DomainName As String * MAX_DOMAIN_NAME_LEN
            CurrentDnsServer As Long
            ;DnsServerList As IP_ADDR_STRING
            NodeType As Long
            ScopeId  As String * MAX_SCOPE_ID_LEN
            EnableRouting As Long
            EnableProxy As Long
            EnableDns As Long
End Type
Public Declare Function GetNetworkParams Lib "IPHlpApi.dll" _
       ;(FixedInfo As Any, pOutBufLen As Long) As Long
Public Declare Function GetAdaptersInfo Lib "IPHlpApi.dll" _
       ;(IpAdapterInfo As Any, pOutBufLen As Long) As Long
Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
       ;(Destination As Any, Source As Any, ByVal Length As Long)

Public Function GetDefaultGateway() As String
Dim error As Long
Dim FixedInfoSize As Long
Dim AdapterInfoSize As Long
Dim i As Integer
Dim PhysicalAddress  As String
Dim NewTime As Date
Dim AdapterInfo As IP_ADAPTER_INFO
Dim AddrStr As IP_ADDR_STRING
Dim FixedInfo As FIXED_INFO
Dim Buffer As IP_ADDR_STRING
Dim pAddrStr As Long
Dim pAdapt As Long
Dim Buffer2 As IP_ADAPTER_INFO
Dim FixedInfoBuffer() As Byte
Dim AdapterInfoBuffer() As Byte

AdapterInfoSize = 0
error = GetAdaptersInfo(ByVal 0&, AdapterInfoSize)
If error <> 0 Then
    If error <> ERROR_BUFFER_OVERFLOW Then
       MsgBox "GetAdaptersInfo sizing failed with error " & error
       Exit Function
    End If
End If
ReDim AdapterInfoBuffer(AdapterInfoSize - 1)

error = GetAdaptersInfo(AdapterInfoBuffer(0), AdapterInfoSize)
If error <> 0 Then
   MsgBox "GetAdaptersInfo failed with error " & error
   Exit Function
End If

CopyMemory AdapterInfo, AdapterInfoBuffer(0), AdapterInfoSize
pAdapt = AdapterInfo.Next
CopyMemory Buffer2, AdapterInfo, AdapterInfoSize
GetDefaultGateway = Buffer2.GatewayList.IpAddress
End Function

Ответить

Номер ответа: 2
Автор ответа:
 Sur



ICQ: 1249088 

Вопросов: 10
Ответов: 304
 Web-сайт: sur.hotbox.ru/
 Профиль | | #2
Добавлено: 31.05.05 11:30
http://support.microsoft.com/?kbid=223025

Ответить

Номер ответа: 3
Автор ответа:
 Danger_Man



ICQ: 193871483 

Вопросов: 1
Ответов: 4
 Web-сайт: www.florange.info
 Профиль | | #3
Добавлено: 31.05.05 12:42
Огромное спасибо!)

Если несложно - еще одна задачка)

чтобы не вызывать командную строку для добавления нового маршрута и удаления старого - как это сделать средствами VB?

route add 65.109.239.29 определенный_шлюз
route delete 0.0.0.0

Ответить

Номер ответа: 4
Автор ответа:
 Sur



ICQ: 1249088 

Вопросов: 10
Ответов: 304
 Web-сайт: sur.hotbox.ru/
 Профиль | | #4
Добавлено: 31.05.05 14:47
сложно... но интересно :) Этим все на C занимаются.

Private Type MIB_IPFORWARDROW
dwForwardDest As Long
dwForwardMask As Long
dwForwardPolicy As Long
dwForwardNextHop As Long
dwForwardIfIndex As Long
dwForwardType As Long
dwForwardProto As Long
dwForwardAge As Long
dwForwardNextHopAS As Long
dwForwardMetric1 As Long
dwForwardMetric2 As Long
dwForwardMetric3 As Long
dwForwardMetric4 As Long
dwForwardMetric5 As Long
End Type
Private Declare Function CreateIpForwardEntry Lib "IPHlpApi.dll" (ByRef pRoute As Any) As Long
Private Declare Function DeleteIpForwardEntry Lib "IPHlpApi.dll" (ByRef pRoute As Any) As Long 'тут не уверен
Private Declare Function inet_addr Lib "wsock32.dll" (ByVal HostName As String) As Long


Private Function RouteAdd(ByVal sInterfaceIndex As Long, _
ByVal sForwardDestination As String, _
ByVal sForwardMask As String, _
ByVal sGateway As String) As Boolean
Dim IPForwardTable As MIB_IPFORWARDROW
With IPForwardTable
.dwForwardDest = inet_addr(sForwardDestination)
.dwForwardIfIndex = sInterfaceIndex
.dwForwardMask = inet_addr(sForwardMask)
.dwForwardNextHop = inet_addr(sGateway)
.dwForwardAge = 0
.dwForwardMetric1 = 5
'dwForwardProto
'2 - MIB_IPPROTO_LOCAL
'3 - PROTO_IP_NETMGMT
'4 - next hop = final dest
'? - PROTO_IP_NT_STATIC
.dwForwardProto = 3
.dwForwardPolicy = 0
If CreateIpForwardEntry(IPForwardTable) = 0 Then MsgBox "Создан" Else: MsgBox "Ошибка"
End With
End Function


Вызов
'GetInterfaceInd = Buffer2.Index 'из предыдущего поста
RouteAdd GetInterfaceInd, "157.0.0.0", "255.0.0.0", "10.0.0.0"

для удаления подошла та-же функция, только с вызовом DeleteIpForwardEntry. Для удаления чисто по IP видимо надо как-то узнавать остальные параметры таблицы маршрутов.

Ответить

Номер ответа: 5
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #5 Добавлено: 01.06.05 22:22
моно проще... создай прораммно батик, напиши всё что надо в него и запусти.

Ответить

Номер ответа: 6
Автор ответа:
 Danger_Man



ICQ: 193871483 

Вопросов: 1
Ответов: 4
 Web-сайт: www.florange.info
 Профиль | | #6
Добавлено: 02.06.05 12:54
В том-то и дело, что хотелось бы от батника уйти вообще))

Ответить

Номер ответа: 7
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #7 Добавлено: 02.06.05 13:34
шлюз? может он реестре хранится?

Ответить

Номер ответа: 8
Автор ответа:
 Danger_Man



ICQ: 193871483 

Вопросов: 1
Ответов: 4
 Web-сайт: www.florange.info
 Профиль | | #8
Добавлено: 03.06.05 16:10
2 Sur:
Не знаешь, что за ерунда - На компьютере несколько подключений.
Если одно включено - то шлюз не определяет. (хотя он даже в сетевой плате прописан)
включаешь другое, то все нормально.

Ответить

Номер ответа: 9
Автор ответа:
 Danger_Man



ICQ: 193871483 

Вопросов: 1
Ответов: 4
 Web-сайт: www.florange.info
 Профиль | | #9
Добавлено: 03.06.05 16:17
p.s.: про команде route print шлюз при этом определяется нормально.

а вообще - как сделать, чтобы при
shell=("route print";)
данные сохранялись, скажем, в textbox или richtextbox?
вариант с shell=("route print >>info.txt";) не подходит, т.к. из-за кэша нельзя сразу же считать файл

Ответить

Номер ответа: 10
Автор ответа:
 Sur



ICQ: 1249088 

Вопросов: 10
Ответов: 304
 Web-сайт: sur.hotbox.ru/
 Профиль | | #10
Добавлено: 06.06.05 12:02
про ерунду - нет возможности экпериментировать.
а про то, как достать данные консольного окна... ищем примеры работы с консолью.
Для начала (если через файл) попробуй так

ret = Shell("net.bat >tmp", vbNormalFocus)
pHandle = OpenProcess(&H100000, True, ret)
WaitForProcessToEnd = WaitForSingleObject(pHandle, INFINITE)
затем читай файл.

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам