ANTICHAT — форум по информационной безопасности, OSINT и технологиям
ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию.
Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club,
и теперь снова доступен на новом адресе —
forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
 |
|

04.02.2009, 16:13
|
|
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме: 560332
Репутация:
15
|
|
А может я чего не подключил? из за этого и пишет типо неизвестный тип данных
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
|
|
|

04.02.2009, 16:15
|
|
Познающий
Регистрация: 07.09.2008
Сообщений: 79
Провел на форуме: 272452
Репутация:
10
|
|
Сообщение от Glazz
А может я чего не подключил? из за этого и пишет типо неизвестный тип данных
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
все что касаеться сокетов находиться в winsock2.h.
Ты лучше целый код покажи.
|
|
|

04.02.2009, 16:17
|
|
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме: 560332
Репутация:
15
|
|
Сообщение от xismyname
В структуре sockaddr только две переменные,sa_family и sa_data.Конечно можешь с этой структурой работать но с ней намного тяжелее чем со структурой sockaddr_in именно поэтому последняя из них и была создана.
Так что работать ты можешь нормально с sockaddr_in но когда будешь передавать функциям нужно "конвертировать" на sockaddr.
Например : (struct sockaddr*)&addr;
ээ , это так :
struct sockaddr_in addr;
...
..
(struct sockaddr*)&addr ?
поробовал так - все компилится , запускаю программу - проходит вроде без ошибок. Смотрю лог подключений Apach'а , там нету записи о том , что я подлкючался.
Или чтоб была запись нужно хоть что-то отправить? я тока подключаюсь и все.
Последний раз редактировалось Glazz; 04.02.2009 в 16:23..
|
|
|

04.02.2009, 16:19
|
|
Познающий
Регистрация: 07.09.2008
Сообщений: 79
Провел на форуме: 272452
Репутация:
10
|
|
Сообщение от Glazz
ээ , это так :
struct sockaddr_in addr;
...
..
(struct sockaddr*)&addr ?
Ты на виндовс как я думаю ?
Так вот TCP клиент :
Код:
#include <windows.h>
#include <winsock2.h>
#include <stdio.h>
#define REMOTE_ADDR "127.0.0.1"
#define DEF_HTTP_PORT 80
int main(void)
{
WSADATA wsd;
struct sockaddr_in addr;
if( WSAStartup( MAKEWORD(2,2),&wsd ) == 0)
{
puts("WIndows socket interface is loaded");
addr.sin_addr.s_addr = inet_addr(REMOTE_ADDR);
addr.sin_family = AF_INET;
addr.sin_port = htons(DEF_HTTP_PORT);
SOCKET lsocket = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if( lsocket != -1 )
{
unsigned int addrLen = sizeof(addr);
if( connect(lsocket,(SOCKADDR*)addr,addrLen ) == 0 )
{
puts("Connected to server\n");
}
else
{
printf("Error : %d\n", WSAGetLastError());
}
}
else
{
puts("Could not create socket");
}
}
else
{
puts("Could not load windows socket interface");
}
}
Если что не тестировал,сразу написал в редакторе сообщении на этом форуме 
Последний раз редактировалось xismyname; 04.02.2009 в 20:46..
|
|
|

04.02.2009, 16:28
|
|
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме: 560332
Репутация:
15
|
|
Сообщение от xismyname
А в какую функция передаешь ?
connect();
в проверке не так проверял на подключилось/не подключилось. Оказалось , что connect(...) == -1
Вот код , можете сказать ошибки? :
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
#define PORT 80
#define SERVERADDR "127.0.0.1"
int main()
{
const char* buff_send = "GET / HTTP/1.1\r\nHost: 127.0.0.1\r\n\r\n";
WSADATA WsaData;
WSAStartup (MAKEWORD(2,2), &WsaData);
SOCKET s;
s = socket(AF_INET,SOCK_STREAM,0);
SOCKADDR_IN dest_addr;
dest_addr.sin_family=AF_INET;
dest_addr.sin_port=htons(PORT);
dest_addr.sin_addr.s_addr=inet_addr(SERVERADDR);
printf("socket - %i",s);
int r = connect(s,(struct sockaddr *)&dest_addr,sizeof(dest_addr));
if(r < 0)
printf("Connect FAILED\n");
int send_byte = send(s, (char* ) & buff_send, sizeof(buff_send), 0 );
printf("%i\n",send_byte);
closesocket(s);
WSACleanup();
return 0;
}
Последний раз редактировалось Glazz; 04.02.2009 в 16:52..
|
|
|

04.02.2009, 21:29
|
|
Участник форума
Регистрация: 11.04.2007
Сообщений: 219
Провел на форуме: 982101
Репутация:
13
|
|
когда то писал,пример на сокетах мини чата.
#include <iostream>
#include <process.h>
#include <winsock2.h>
#include "chat.h"
using namespace std;
#pragma comment(lib, "ws2_32.lib")
void StartWinSock();
void StopWinSock();
void chat_server();
void chat_client_thread(void *pv);
int exit_chat_server;
CRITICAL_SECTION cs;
int main()
{
StartWinSock();//ініціалізація
exit_chat_server = 0;
chat_server();
StopWinSock();//закриваємо все
return 0;
}
//-----------------------------------------
void StopWinSock()
{
if (WSACleanup())
cout<<"Error Cleapir"<<endl;
else
cout<<"Cleapir Good !!!!!"<<endl;
}
void StartWinSock()
{
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2,2), &wsaData))
{
cout<<"winsock not bi initialized !"<<endl;
WSACleanup();
}
else
cout<<"Winsock initial OK !!!!"<<endl;
}
//-----------------------------------------
void chat_server()
{
//----- отримуємо адресу хоста -----------------------------------
char local_host[255];
gethostname(local_host, 255);
sockaddr_in clientAddr;
in_addr local_ip = *((in_addr *)gethostbyname(local_host)->h_addr);
clientAddr.sin_family = AF_INET;
clientAddr.sin_addr = local_ip;
clientAddr.sin_port = htons(CHAT_PORT);
cout<<"starting server on "<<inet_ntoa(local_ip)<<endl;
// --------------- ініціалізуємо критичну секцію ---------------
InitializeCriticalSection(&cs);
//---------- створюємо сокет -------------------------------------
SOCKET server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
//---------------- ми сервер, зєднуємо сокет з портом --------------
bind(server_socket, (sockaddr*) &clientAddr, sizeof(clientAddr));
//----------------- переводимо сокет в режим очікування -------------------
listen(server_socket, CHAT_BACKLOG);
while(exit_chat_server == 0)
{
cout<<"waiting for connection..."<<endl;
fflush(stdout);
//------------- створюємо новий сокет для клієнта і приєднуємо його ---------
int clientAddrlength = sizeof(clientAddr);
SOCKET client_socket = accept(server_socket, (sockaddr*) &clientAddr, &clientAddrlength);
cout<<"client connected: "<<inet_ntoa(clientAddr.sin_addr)<<endl;
fflush(stdout);
//запускаємо потік для клієнта
_beginthread(chat_client_thread, 0, (void*)client_socket);
}
}
void chat_client_thread(void *pv)
{
SOCKET s = (SOCKET)pv;
int client_exit = 0;
chat_login_data login_data; //обєкт структури chat_login_data з chat.h
//отримати дані з приєднаного сокета
recv(s, (char*) &login_data, sizeof(login_data), 0);
chat_message msg; //обєкт структури chat_message з chat.h
cout<<login_data.login<<" entered chat"<<endl;
while(client_exit == 0 && !exit_chat_server)
{
if(recv(s, (char*)&msg, sizeof(msg), 0)<=0)
{
cout<<login_data.login<<" sent invalid message"<<endl;
client_exit = 1;
break;
} else {
EnterCriticalSection(&cs);
cout<<login_data.login<<": "<<msg.text<<endl;
fflush(stdout);
LeaveCriticalSection(&cs);
}
}
}
#define CHAT_MAXMSG 512
#define CHAT_PORT 1234
#define CHAT_BACKLOG 10
struct chat_login_data
{
char login[255];
char password[255];
};
struct chat_message
{
char to_login[255];
char text[CHAT_MAXMSG];
};
|
|
|

05.02.2009, 12:48
|
|
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме: 560332
Репутация:
15
|
|
WSAStartup(..); вообще не включается.
if(WSAStartup(MAKEWORD(2,2), &WsaData))
printf("WSAStartup ok\n");
а как провильно проверить норм выполнилась WSAStartup() или нет?
if(WSAStartup())
успешно
или
if(WSAStartup() < 0)
не успшено
Может кто дать описание четвертого аргумента для
send(); ?
Вроде как все подлкючается , отправляю заголовки на апач , и r = send() , и r = 4 , хотя хаголовки больше 4 символов должны отправиться.
В логах апача снова нету соеденений :\
Последний раз редактировалось Glazz; 05.02.2009 в 13:52..
|
|
|

05.02.2009, 15:15
|
|
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме: 560332
Репутация:
15
|
|
Поробовал отправить на фтп сервер такой запрос:
const char* buff_send = "USER 1\r\nPASS 123456\r\n";
Снова получилось , что отправилось 4байта.
В ответ пришел ОТВЕТ!!!
421 вы не заллгинились и т.д. и Read byte= 34.
Сейчас проблема - почему передает 4 байта???
|
|
|

05.02.2009, 15:23
|
|
Участник форума
Регистрация: 30.01.2009
Сообщений: 196
Провел на форуме: 505362
Репутация:
66
|
|
Когда ты делаешь так:
Код:
const char* buff_send = "USER 1\r\nPASS 123456\r\n";
ты создаешь 1 символ buff_send типа char (в винде вроде 4 байта и есть)
Чтобы передавало целую строку, нужно создать массив:
Код:
const char buff_send[64] = "USER 1\r\nPASS 123456\r\n";
и все отлично передается
Последний раз редактировалось awdrg; 05.02.2009 в 15:27..
|
|
|

05.02.2009, 15:30
|
|
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме: 560332
Репутация:
15
|
|
Сообщение от awdrg
Когда ты делаешь так:
Код:
const char* buff_send = "USER 1\r\nPASS 123456\r\n";
ты создаешь 1 символ buff_send типа char (в винде вроде 4 байта и есть)
Чтобы передавало целую строку, нужно создать массив:
Код:
const char buff_send[64] = "USER 1\r\nPASS 123456\r\n";
и все отлично передается
внатуре передается.
И НА САЙТЫ СМОГ ЗАКОННЕТИСТЯ!!! УРА УРА УРА !!! ТУЦ ТУЦ
щас пойду смотреть как писать сервера... это вот сложнее
Последний раз редактировалось Glazz; 05.02.2009 в 15:37..
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|