Страница: 1 |
Страница: 1 |
Вопрос: Смена прокси
Добавлено: 01.09.04 00:49
Автор вопроса: TERMIT | Web-сайт:
Народ...о великие програмеры пожалуйсто помоги плиз....короче надо пример или что то в этом роде......короче надо програмно сменить http прокси на браузере IE.....плиз помогите очень надо.........
Ответы
Всего ответов: 15
Номер ответа: 1
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #1
Добавлено: 01.09.04 11:18
Вот мой модуль для смены прокси, а как работать с ним, думаю, разберешься сам (просто посмотри в реестр):
------------
' DaSharm (dasharm@mail.ru) ICQ: 2068093
Public Type VBRasEntryName
entryname As String
Win2000_SystemPhonebook As Boolean
PhonebookPath As String
End Type
Private Declare Function RasEnumEntries Lib "rasapi32.dll" Alias "RasEnumEntriesA" (ByVal lpStrNull As String, ByVal lpszPhonebook As String, lpRasEntryName As Any, lpCb As Long, lpCEntries As Long) As Long
Private Declare Function RegOpenKeyEx Lib "advapi32.dll" Alias "RegOpenKeyExA" (ByVal hKey As Long, ByVal lpSubKey As String, ByVal ulOptions As Long, ByVal samDesired As Long, phkResult As Long) As Long
Private Declare Function RegQueryValueEx Lib "advapi32.dll" Alias "RegQueryValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32.dll" (ByVal hKey As Long) As Long
Private Declare Function RegSetValueEx Lib "advapi32.dll" Alias "RegSetValueExA" (ByVal hKey As Long, ByVal lpValueName As String, ByVal Reserved As Long, ByVal dwType As Long, ByVal lpData As Any, ByVal cbData As Long) As Long
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Public Function GetRecord(RecName As String, ProxyString() As Byte) As Long
 im hOpen As Long, hBuff() As Byte, lDataBufSize As Long
If Not RegOpenKeyEx(&H80000001, "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet settings\connections", 0&, &H3F, hOpen) = 0& Then Exit Function
If Not RegQueryValueEx(hOpen, RecName, 0&, 1, ByVal 0&, lDataBufSize) = 0& Then Exit Function
ReDim hBuff(lDataBufSize)
If Not RegQueryValueEx(hOpen, RecName, 0, 3, hBuff(0), lDataBufSize) = 0& Then Exit Function
Call RegCloseKey(hOpen)
ProxyString = hBuff
GetRecord = lDataBufSize
End Function
Public Sub SetRecord(RecName As String, ProxyString() As Byte)
Dim hKey As Long
RegOpenKeyEx &H80000001, "SOFTWARE\Microsoft\Windows\CurrentVersion\Internet settings\connections", 0, &H3F, hKey
RegSetValueEx hKey, RecName, 0&, &H3, VarPtr(ProxyString(0)), UBound(ProxyString)
End Sub
Public Function VBRasGetAllEntries(clsRasEntryName() As VBRasEntryName, Optional strPhoneBook As String) As Long
 im rtn As Long, i As Long
 im lpCb As Long
 im lpCEntries As Long
 im b() As Byte
 im strTemp As String
 im dwSize As Long
 im lngLen As Long
 im lngBLen As Variant
ReDim b(3)
lngBLen = Array(532&, 264&, 28&
For i = 0 To 2
CopyMemory b(0), CLng(lngBLen(i)), 4
rtn = RasEnumEntries(vbNullString, strPhoneBook, _
b(0), lpCb, lpCEntries)
If rtn <> 632 Then Exit For
Next i
VBRasGetAllEntries = lpCEntries
If lpCEntries = 0 Then Exit Function
dwSize = lpCb \ lpCEntries
ReDim b(lpCb - 1)
CopyMemory b(0), dwSize, 4
rtn = RasEnumEntries(vbNullString, strPhoneBook, b(0), lpCb, lpCEntries)
strTemp = String(dwSize - 4, 0)
ReDim clsRasEntryName(lpCEntries - 1)
If dwSize = 28 Then lngLen = 21 Else lngLen = 257
For i = 0 To lpCEntries - 1
CopyMemory ByVal strTemp, b((i * dwSize) + 4), lngLen
clsRasEntryName(i).entryname = _
Left(strTemp, InStr(strTemp, Chr$(0)) - 1)
Next i
If dwSize > 264 Then
For i = 0 To lpCEntries - 1
CopyMemory clsRasEntryName(i).Win2000_SystemPhonebook, _
b((i * dwSize) + 264), 2&
CopyMemory ByVal strTemp, b((i * dwSize) + 268), 260&
clsRasEntryName(i).PhonebookPath = _
Left(strTemp, InStr(strTemp, Chr$(0)) - 1)
Next i
Else
For i = 0 To lpCEntries - 1
clsRasEntryName(i).PhonebookPath = strPhoneBook
Next i
End If
End Function
Номер ответа: 2
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #2
Добавлено: 01.09.04 14:59
2 DaSharm: если открыт IE, и запустить твой код, то прокси будет
сменен сразу или только после перезапуска IE?
Номер ответа: 3
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #3
Добавлено: 01.09.04 16:12
Только после перезапуска, я и сам не смог сделать смену при запущенном ИЕ. А было бы приколько...например, чтобы отлавливать НТТР пакеты в запущенного ИЕ...
Ваще-то, когда я разбирался с тем, как применить проксю к работающему компоненту WebBrowser (при написании НТТР отладчика), то я понял, что все дело выполняет API InternetSetOption, но она действует в пределах одного приложения, например, когда я изменю проксю в своей проге, то на ИЕ это не повлияет, только на мою прогу. А сам InternetSetOption может вызываться с тремя флагами: отключить проксю, указать проксю, установить проксю пользуясь записями реестра. ИЕ использует последний флаг, потому надо изменять значение ключа в реестре.
Номер ответа: 4
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #4
Добавлено: 01.09.04 16:36
Но ведь некоторые программы умеют менять это на лету, например
Naviscope. Как они это делают?
Меня этот вопрос уже давно мучает, ибо хочется сделать опцию быстрого
включения прокси в одной проге...
Номер ответа: 5
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #5
Добавлено: 01.09.04 18:06
Naviscope?НЕ слышал, но если такова существует, то нужно продолжать исследования, займусь этим, если будет свободное время, ато так шас впадло, вернулся с 2-х недельного отдыха в Польше, комп включать не хочу даже...
Номер ответа: 6
Автор ответа:
TERMIT
ICQ: 5297101
Вопросов: 16
Ответов: 93
Web-сайт:
Профиль | | #6
Добавлено: 01.09.04 20:35
мда....блин а как ну ты говорил в передлах твоей проги мне так и надо....только короче прога ну для подбора пассов но там есть загвоздка блин короче ну прокси нужно менять полюбак а то твой айпи блочат....блин проше вас помогите а то придеться на скриптах писать а так впадлу .......
Номер ответа: 7
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #7
Добавлено: 01.09.04 21:38
Лучше напиши опиши конкретно, тогда я помогу. Для подбор пассов по НТТР, думаю, лучше использовать отправку НТТР пакетов нежели юзать ВебБровзер...
Номер ответа: 8
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #8
Добавлено: 02.09.04 14:18
Naviscope - это такой прокси с некоторыми полезными функциями вроде
обрубания рекламы... Скачай, посмотри, он меньше мегабайта весит.
Номер ответа: 9
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #9
Добавлено: 02.09.04 15:53
Посмотрю, но, может быть, он использует перехват АПИ...Посмотрю в APIMonitor'e...
Номер ответа: 10
Автор ответа:
TERMIT
ICQ: 5297101
Вопросов: 16
Ответов: 93
Web-сайт:
Профиль | | #10
Добавлено: 02.09.04 20:25
дык я понимаю что пакетами было бы лучше гы только на это есть свои причины вот так ну корчое надо именно так мне зделать....
Номер ответа: 11
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #11
Добавлено: 03.09.04 16:26
Ну эсли проксю в своей проге изменять, то вот кусок кода из моего НТТР отладчика, меняющий проксю.
'---------------
'HTTPDbg DaSharm ICQ:2068093
'---------------
Private Type INTERNET_PROXY_INFO2
dwAccessType As Long
lpszProxy As String
lpszProxyBypass As String
End Type
Private Declare Function InternetSetOption Lib "wininet.dll" Alias "InternetSetOptionA" (ByVal hInternet As Long, ByVal dwOption As Long, ByRef lpBuffer As Any, ByVal dwBufferLength As Long) As Long
Public Function ApplyProxy(Inject As Boolean) As Long
 im strServers As String
 im strBuffer As String
 im ProxyInfo As INTERNET_PROXY_INFO2
strBuffer = "socks=127.0.0.1:44 https=127.0.0.1:44 http=127.0.0.1:44 " & _
"gopher=127.0.0.1:44 ftp=127.0.0.1:44"
strServers = RTrim$(strBuffer)
If Inject = True Then ProxyInfo.dwAccessType = 3 Else ProxyInfo.dwAccessType = 1
ProxyInfo.lpszProxy = strServers
ProxyInfo.lpszProxyBypass = ""
ApplyProxy = InternetSetOption(0&, 38, ProxyInfo, LenB(ProxyInfo))
End Function
'-----------------
Использование:
ApplyProxy true ' Выставить проксю 127.0.0.1:44
ApplyProxy false ' Вернуть по умолчанию
Номер ответа: 12
Автор ответа:
TERMIT
ICQ: 5297101
Вопросов: 16
Ответов: 93
Web-сайт:
Профиль | | #12
Добавлено: 03.09.04 20:08
не понял как это кусок тоесть не все?
Номер ответа: 13
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #13
Добавлено: 03.09.04 20:52
тоесть в моем НТТР отладчике ещё 150 кб кода, а этот кусок меняет проксю для WebBrowser Control без проблем.
Номер ответа: 14
Автор ответа:
Павел
Администратор
ICQ: 326066673
Вопросов: 368
Ответов: 5968
Web-сайт:
Профиль | | #14
Добавлено: 04.09.04 10:27
Сейчас попробовал, вроде для открытого браузера IE6 этот код прокси не
меняет
Номер ответа: 15
Автор ответа:
DaSharm
ICQ: 780477
Вопросов: 72
Ответов: 1297
Web-сайт:
Профиль | | #15
Добавлено: 04.09.04 10:54
Я написал:
>в своей проге изменять
А чтобы для ИЕ, то используй код, что я кинул выше. Правда на ходу я не умею для ИЕ изменять.