HOME    FORUMS    MEMBERS    RECENT POSTS    LOG IN  
Баннер 1   Баннер 2

ANTICHAT — форум по информационной безопасности, OSINT и технологиям

ANTICHAT — русскоязычное сообщество по безопасности, OSINT и программированию. Форум ранее работал на доменах antichat.ru, antichat.com и antichat.club, и теперь снова доступен на новом адресе — forum.antichat.xyz.
Форум восстановлен и продолжает развитие: доступны архивные темы, добавляются новые обсуждения и материалы.
⚠️ Старые аккаунты восстановить невозможно — необходимо зарегистрироваться заново.
Вернуться   Форум АНТИЧАТ > ПРОГРАММИРОВАНИЕ > С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

  #2241  
Старый 04.02.2009, 16:13
Glazz
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме:
560332

Репутация: 15
По умолчанию

А может я чего не подключил? из за этого и пишет типо неизвестный тип данных

#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
 
Ответить с цитированием

  #2242  
Старый 04.02.2009, 16:15
xismyname
Познающий
Регистрация: 07.09.2008
Сообщений: 79
Провел на форуме:
272452

Репутация: 10
По умолчанию

Цитата:
Сообщение от Glazz  
А может я чего не подключил? из за этого и пишет типо неизвестный тип данных

#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
все что касаеться сокетов находиться в winsock2.h.
Ты лучше целый код покажи.
 
Ответить с цитированием

  #2243  
Старый 04.02.2009, 16:17
Glazz
Участник форума
Регистрация: 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..
 
Ответить с цитированием

  #2244  
Старый 04.02.2009, 16:19
xismyname
Познающий
Регистрация: 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..
 
Ответить с цитированием

  #2245  
Старый 04.02.2009, 16:28
Glazz
Участник форума
Регистрация: 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..
 
Ответить с цитированием

  #2246  
Старый 04.02.2009, 21:29
zindi
Участник форума
Регистрация: 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];
};
 
Ответить с цитированием

  #2247  
Старый 05.02.2009, 12:48
Glazz
Участник форума
Регистрация: 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..
 
Ответить с цитированием

  #2248  
Старый 05.02.2009, 15:15
Glazz
Участник форума
Регистрация: 09.08.2008
Сообщений: 139
Провел на форуме:
560332

Репутация: 15
По умолчанию

Поробовал отправить на фтп сервер такой запрос:
const char* buff_send = "USER 1\r\nPASS 123456\r\n";

Снова получилось , что отправилось 4байта.
В ответ пришел ОТВЕТ!!!
421 вы не заллгинились и т.д. и Read byte= 34.
Сейчас проблема - почему передает 4 байта???
 
Ответить с цитированием

  #2249  
Старый 05.02.2009, 15:23
awdrg
Участник форума
Регистрация: 30.01.2009
Сообщений: 196
Провел на форуме:
505362

Репутация: 66
Отправить сообщение для awdrg с помощью ICQ
По умолчанию

Когда ты делаешь так:
Код:
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..
 
Ответить с цитированием

  #2250  
Старый 05.02.2009, 15:30
Glazz
Участник форума
Регистрация: 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..
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Часто задаваемые вопросы по MySQL Серый PHP 5 28.12.2006 18:26
Интернетчики задали российскому президенту очень странные вопросы podkashey Мировые новости. Обсуждения. 4 07.07.2006 16:53
Вопросы по Ipb 2.0 Voodoo_People Уязвимости CMS / форумов 26 15.02.2005 22:57



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ