Есть две сетевухи. При connect'е надо указать через какой адаптер надо выходить в сеть. И это не в своей программе, а в чужом клиенте. Сделал так: в начале bind с указанным ипом, а потом этот-же сокет юзать при канекте. Вроде-бы даже прокатило, программа канектится через указанный ип, но дальше ничего не происходит..., и это со всеми программами. вот хукнутый connect Код (Text): NewFunction21 proc mov _ecx21,ecx mov _ebx21,ebx mov _esi21,esi mov _edi21,edi cld mov ecx,6 mov esi,offset _jmp21 mov edi,func21 rep movsb push ebp mov ebp,esp invoke inet_addr,$CTA0("172.20.1.11") mov sin.sin_addr,eax mov sin.sin_family,02h mov sin.sin_port,0 invoke socket,02h,01h,00h mov ebx,eax invoke bind,ebx,addr sin,16 sock equ dword ptr [ebp+8] ;1 push ebx pop sock leave mov eax,[esp] mov word21,dword ptr eax pop ebx call func21 push word21 cld mov ecx,6 mov esi,offset _pmj21 mov edi,func21 rep movsb mov ecx,_ecx21 mov ebx,_ebx21 mov esi,_esi21 mov edi,_edi21 ret NewFunction21 endp Когда я юзаю свой сокет, его сокет становится непригодным, поэтому и такая проблема? И ещё вопрос, мож-но ли решить эту задачу другим методом? Не через bind.
Я не совсем понял твой вопрос, но чтобы узнать локальный адрес сетвухи используется: Код (Text): invoke getsockname,HendlConnect,addr sin,addr sizeofsin mov eax,sin.sin_addr.S_un.S_addr для удаленного: Код (Text): invoke getpeername,HendlConnect,addr sin,addr sizeofsin mov eax,sin.sin_addr.S_un.S_addr В регистре eax получишь искомое Надеюсь это тебе поможет.
Если у тебя сетевые включены к сети с разными масками, то WIN-да сама определит по IP через какую сетевую работать, но вот если маски одинаковые то пакеты будут отправляться в обе сетевые и там уже завист какая сетевая карта получит первой ответ.