Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Войти
 
Страницы: 1
RSS
Как определить IP?
 
Есть маленький сервак висящий на определённом порту.
Как програмно определить ip клиента, конектившийся к этому порту?
 
Что ты имеешь ввиду под словом програмно?

может ты имеешь в виду это:
win: cmd.exe netstat
А может ты имеешь в виду что-то связанное вот с этим:
http://linux.vitebsk.by/docs/man2/socket.2.html
там про сокеты. ман (даже на русском...)
уточни как и что ты хочешь получить...
 
Darvin
полсе вызова accept IP помещается в
sin.sin_addr структуры sockaddr_in
каждый байт одно из четырёх чисел IP адреса
на пример, 0100007F это 127.0.0.1

но для твоего сервака это и не нужно
достаточно сделать send в тот же сокет.
 
jabber, я просто решил сначало как-нить матереализировать IP, и потом сам знаешь чё хочу делать :}

jabber, если знаешь, подскажи плизз как достать IP из входящих сокетов?
 
Ты мне скажи как ты повесил севак на порт? веревкой прикрутил
Грамотно задавать вопросы надо

потом что за сервак на какой ОС?
ответишь на эти вопросы можно будет конкретнее разговаривать
 
Acid, не нервничай  
сервак самый стандартный:
.data
ddPort      dd 21
wsadata WSADATA <>
sin sockaddr_in <>
WM_SOCKET equ WM_USER + 100
.data?
client  dd ?
sock  dd ?
.code
start:
invoke WSAStartup, 101h, addr wsadata
invoke socket, AF_INET, SOCK_STREAM, 0
mov sock, eax

invoke htons, ddPort
mov sin.sin_port, ax  
mov sin.sin_family, AF_INET  
mov sin.sin_addr, INADDR_ANY

invoke bind, sock, addr sin, sizeof sin
invoke listen, sock, SOMAXCONN

__AcceptConn:
       xor eax, eax
       invoke accept, sock, 0, 0
       mov client, eax
       
      invoke LocalAlloc,LMEM_FIXED,prsize
      mov buf,eax

ОС: XP
 
Цитата
Darvin пишет:
jabber, я просто решил сначало как-нить матереализировать IP, и потом сам знаешь чё хочу делать :}

jabber, если знаешь, подскажи плизз как достать IP из входящих сокетов?
getpeeraddr
 
Acid
да не сервак . так программка для Win
биндит сокет и слушает определённый порт...
buggzy
getpeeraddr?
в смылсе getpeername?
так она вообще не нужна.
я ж говорю после вызова accept
IP будет в sin.sin_addr.
 
buggzy, не могли бы Вы прокомментировать? как использовать?
а то, google и msdn молчат...
 
кажется jabber опередил :}

jabber, смотри, тогда
если продолжить вышенаписанный код,

invoke WSAStartup,101h, addr wsadata
invoke socket,AF_INET,SOCK_STREAM,0
mov socka,eax

invoke htons, ddPort
mov sin.sin_port, ax  
mov sin.sin_family, AF_INET

invoke inet_addr, addr sin
mov sin.sin_addr, eax
invoke connect, socka, addr sin, sizeof sin
cmp eax,-1
jz __EndConn
 
      invoke recv, client, buf, prsize, 0
      cmp eax,-1
     jz __EndConn
      mov dannie,eax
      
      invoke send, socka, addr buffer, dannie, 0
      cmp eax,-1
     jz __EndConn
почему не открывает ftp у клиента?
 
немного не понял про фтп клиент

но принцип такой
сперва коннектишься к удалённому сокету,
затем
invoke send, socka, addr buffer, dannie, 0
на пример для хттп сервера buffer
может быть GET http://xyz.com HTTP/1.0,13,10 Host: xyz.com 13,10,13,10
затем получаем ответ сервера( у тебя всё наоборот)
invoke recv, client, buf, prsize, 0
типа HTTP/1.1 200 OK и т. д.

а по поводу достать IP из входящих сокетов
есть в masm функция IPtoString
Страницы: 1
Читают тему