• XSS.stack #1 – первый литературный журнал от юзеров форума

Проблема с connect в сокетах

graphp

floppy-диск
Забанен
Регистрация
17.11.2019
Сообщения
7
Реакции
-1
Пожалуйста, обратите внимание, что пользователь заблокирован
Пишу на fasm простенький tcp клиент и возникает проблема на вызове функции connect
Код ошибки LastError после вызова connect = 00002741 (WSAEADDRNOTAVAIL)
LastStatus = C0000207 (STATUS_INVALID_ADDRESS_COMPONENT)

вот сам код
Код:
format PE GUI 4.0
use32
entry start
include 'C:\Users\Adr\Desktop\fasm\INCLUDE\WIN32A.INC'

section '.text' code readable executable

start:
        push wsadata
        push 0x0202
        call [WSAStartup]
        cmp eax, 0
        jz get_ip_by_name

get_ip_by_name:
        ;push name
        ;call [gethostbyname]
        ;mov eax, [eax+12]
        ;mov eax, [eax]
        ;mov eax, [eax]
        ;mov [IP], eax
        mov eax, dword [tsttt]

        mov [sin2.sin_addr.s_un.s_addr], eax
        mov [sin2.sin_port], 2222d
        mov [sin2.sin_family], 2

init_socket:
        push 0
        push 1
        push 2
        call [socket]
        mov [s1], eax
        cmp eax, not 0
        jnz noerr1
        jmp close

noerr1:
        push mt2-mt1
        push sin2
        push [s1]
        call [connect]
        cmp eax, 0
        jz noerr2

noerr2:
        push 0
        push 100
        push buf
        push [s1]
        call [recv]

noerr3:
        push 6
        push txt
        push [s1]
        call [send]

close:
        push [s1]
        call [closesocket]



exit:
        push 0
        call [ExitProcess]

section '.data' data readable writeable
;===========================================================
wsadata WSADATA

struct S_UN_B
       s_b1 db 0
       s_b2 db 0
       s_b3 db 0
       s_b4 db 0
ends

struct S_UN_W
       s_w1 dw 0
       s_w2 dw 0
ends

struct ADDRESS_UNION
       s_u_b S_UN_B <>
       s_u_w S_UN_W <>
       s_addr dd 0
ends

struct in_addr
       s_un ADDRESS_UNION <>
ends

struct socaddr_in
       sin_family dw 0
       sin_port dw 0
       sin_addr in_addr <>
       sin_zero db 8 dup (0)
ends
mt1:
sin2 socaddr_in <0>
mt2:
s1 dd 0
;===========================================================
IP dd 0
name db '', 0
tsttt db 127,0,0,1
buf db 100 dup (0)
txt db 'hello', 0, 0

section '.idata' import data readable
library kernel32, 'kernel32.dll', ws2_32, 'ws2_32.dll'
import ws2_32, WSAStartup, 'WSAStartup',\
               gethostbyname, 'gethostbyname',\
               socket, 'socket',\
               connect, 'connect',\
               recv, 'recv',\
               send, 'send',\
               closesocket, 'closesocket'
import kernel32, sleep, 'Sleep', ExitProcess, 'ExitProcess'
 
Во-первых - открой для себя макрос invoke, во-вторых - ip адрес пишется через точки, в-третьих - в момент проверки висит ли у тебя на 127.0.0.1:2222 какой-либо сервис, иначе не будет коннекта.

Также лучше использоваться апишки inet_addr и htons при заполнении sockaddr_in.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх