Написал код на VB6 для Westell 6100 (dynamic IP)
1. добавляем модуль (.bas file)
2. на форму ставим web browser control
3. в reference добавляем Microsoft HTML Object Library
4. в Project property ставим Startup Object Sub Main
5. форму называем frmRouter
6. web browser control называем brwProxy
7. исходник для теста внешнего IP (функция GetPublicIP) берем из
http://vbnet.mvps.org/index.html?code/internet/getpublicip.htm 8. в модуле пишем:
Option Explicit
Public OldIP As String
Public NewIP As String
Public Sub Main()
' Dim TimeStart As Date
'TimeStart = Now
frmRouter.Show
' OldIP = frmRouter.GetPublicIP
frmRouter.ChangeIP
'NewIP = frmRouter.GetPublicIP
Unload frmRouter
' MsgBox DateDiff("s", TimeStart, Now) & _
vbCrLf & OldIP & _
vbCrLf & NewIP
End Sub
закомментированные куски нужны для сравнения исходного IP и нового IP. Функция GetPublicIP у меня в форме. Вы ее можете писать где угодно
9. в форме пишем:
Option Explicit
Dim bStatus As Boolean
Public Sub ChangeIP()
Dim strTemp As String
Dim HTMLDocFR As MSHTML.HTMLDocument
Dim HTMLDoc As MSHTML.HTMLDocument
Dim Date1 As Date
Dim DateTemp As Date
strTemp = "http://192.168.1.1"
WaitForBrowser strTemp
Set HTMLDoc = brwProxy.Document
Set HTMLDocFR = HTMLDoc.frames(0).Document
'Disconnect
HTMLDocFR.PPPAction.PPPRequest.Value = 2
HTMLDocFR.PPPAction.currentCnIndex.Value = 0
HTMLDocFR.PPPAction.submit
WaitForBrowserNoLink
Date1 = Now
DateTemp = DateAdd("s", 90, Date1)
Do While Now < DateTemp
DoEvents
Loop
'connect
HTMLDocFR.PPPAction.PPPRequest.Value = 1
HTMLDocFR.PPPAction.currentCnIndex.Value = 0
HTMLDocFR.PPPAction.submit
WaitForBrowserNoLink
Date1 = Now
DateTemp = DateAdd("s", 13, Date1)
Do While Now < DateTemp
DoEvents
Loop
End Sub
Public Sub WaitForBrowser(Link As String)
'2 - navNoHistory
bStatus = False
brwProxy.Navigate2 Link, 2
Do While bStatus = False
DoEvents
Loop
Do While brwProxy.Document.ReadyState <> "complete"
DoEvents
Loop
End Sub
Public Sub WaitForBrowserNoLink()
'2 - navNoHistory
bStatus = False
Do While bStatus = False
DoEvents
Loop
Do While brwProxy.Document.ReadyState <> "complete"
DoEvents
Loop
End Sub
Private Sub brwProxy_DocumentComplete(ByVal pDisp As Object, URL As Variant)
bStatus = True
End Sub
линия кода
DateTemp = DateAdd("s", 90, Date1)
означает "s" - секунды, 90 количество времени, задаваемое для ожидания, пока провайдер сменит IP.
Добавлено: этот код для смены IP для router/DSL modem Westell 6100, который имеет web interface в случае dynamic IP
Не делаю .exe, т.к. каждый router имеет свой интерфейс, поэтому нет времени на что-то универсальное. Кроме того, идеи, возможно, будут полезны каждому, кто хочет сделать что-нибудь для себя, т.к. webbrowser control включен и в Visual Studio 6 так и Visual Studio 2005, а HTML document опирается на DOM (Document Object Model) architecture
Добавлено: да, забыл 192.168.1.1 - это настройки моего router'а - Ваш внутренний IP Вы можете взять из функции LocalIPAddress с того же сайта