![]() |
|
Модераторы: Snowy, Poseidon, MetalFan |
![]()
|
|
| darkida |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 59 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
Помогите разобраться.
Перечитал весь форум. Некоторые пишут что разобрались со своей бедой, но не пишут как. В общем не нашел так и ответов на свой вопросы. Я хочу создать клиент серверную прогу. Но уже в самом начале повсюду одни обломы. 1. Неужто нельзя пользоваться средством ServerSocket и ClientSocket путем интернета если нет постоянного IP адреса. 2. Почему моя программа принимает IP тот который мне выдает ipconfig в строке выполнения задач, а не тот который определяется в интернете. 3. Прога вообще не реагирует на задания клиента: а) потому что я тестю её на одном компе или б) Ошибки в кодинге (хотя это мало вероятно, потому что пробовал элементарки, нифига не пашет) но при этом как я понял прога распознает сервера потому что если указать другой адрес то начинает ругаться и выводить ошибки 10060, 10061, 10057, 10054. 4. И я так понимаю еще могут проблемы с фаерволом возможно ли в дальнейшем научить программу обходить её или выключать программным путем. Помогите пожалуйста. {Я отношусь пока что к числу чайников. И если можно то на понятном языке для чайника писать. )))) } Заранее благодарен. |
|||
|
||||
| darkida |
|
||||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 59 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
Мда тока что проверил через нет. Закинул другу и ввел ИП который выдает комп. А не нет. Работает также. То есть как я понял находит сервер, но опять нифига не делает. Почему находит, потому что при введений другого ИП адреса выдает ошибки. Значит как это не печально, но я труба слепой что не могу найти ошибку в кодинге. Но радует то что нет тех самых ошибок которых я писал выше. Все работает. И фаирвол и антивир ничего не делают. Это радует.
Помогите с кодингом где что ни так. Кодинг упростил на нуль чтоб получить хоть какой-то резудьтат от сервера. Ах да некоторые части взял с drkb. Там были примеры на эту тему, но также не пашут. СЕРВЕР
КЛИЕНТ
Как вы видите тут 3 варианта для проверки: 1.procedure TForm1.ServerSocket1Accept(Sender: TObject; Socket: TCustomWinSocket); который должен вывести список подключенных клиентов 2.procedure TForm1.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket); который должен отправить мне файл 3. procedure TForm1.ServerSocketlClientRead(Sender: TObject; Socket: TCustomWinSocket); который должен изменить лабел Ни один из этих вариантов не откликается. Помогите пожалуйста. Это сообщение отредактировал(а) darkida - 26.1.2010, 15:44 |
||||
|
|||||
| kami |
|
||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Можно, но связано с большими заморочками. IP адрес не обязательно должен быть постоянным, главное - чтобы IP сервера был "виден" из интернета. Это возможно в следующих случаях: 1. "Белый" IP - то, что показывает ipconfig и то, что показывают всякие сервисы в интернете совпадает. 2. Если не совпадает - значит компьютер сидит за NAT, которая переадресовывает информацию внешний_IP<=>IP_компьютера_в локалке. В этом случае можно попросить провайдера дать Вам свой внешний IP. Они могут это сделать либо дав Вам пункт 1, либо сделав прямую переадресацию внешнийIP - внутренний. В этом случае клиент должен коннектиться на внешний IP сервера, а там уже посредством переадресации пакеты попадут "куда надо". Проблема с динамическим IP, видимым из интернета одна - узнать, какой внешний IP сейчас, в данный момент, имеет сервер. Это чревато боком, посему чаще всего динамические IP просто не рассматривают.
см. пункт 2 предыдущего высказывания. Трассировку никто не отменял. Сетевым TCP приложениям глубоко параллельно, работают они на одном компьютере или на разных - если коннект произошел, всё остальное - проблемы кода, что подтверждается этим:
то есть - коннект идет.
Виндовый - можно. А как быть с Outpost, Kaspersky, Kerio и всеми остальными? Здесь выход один - при установке программы сказать пользователю "для нормальной работы программы откройте пожалуйста такие и такие порты. Если не знаете как - обратитесь к сисадмину. Если его нет - выкиньте программу." Добавлено через 8 минут и 35 секунд Сервер вообще выводит что-нибудь типа "Listening ..." Client connection accepted и т.п. ? |
||||||||
|
|||||||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Тогда вопрос:
эти процедуры назначены компонентам TClient|TServerSocket? Или просто "висят" в published - секции? Проверяется так: выделив нужный компонент, в инспекторе объектов(F11) переходим на вкладку Events и смотрим там, есть ли что-нибудь напротив OnListening|OnAccept|OnConnect и т.п.? (в принципе, вопрос из ряда параноидальных, но тем не менее). Это сообщение отредактировал(а) kami - 26.1.2010, 16:21 |
|||
|
||||
| darkida |
|
||||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 59 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
Kami спасибо большое. Все четко и ясно, прям как я хотел, в точку. А то я не мог найти ответы на свой вопросы.
Так порты же изначально мы сами задаем. Просто как я понимаю их антивири и фаерволы перехватывают и они не доходят до адресата. Или ты имеешь виду открыть доступ в этих приложениях на нужные порты?
И что с этим делать то? А да в кодинге ошибка есть, ну не ошибка просто забыл снять procedure TForm1.Button4Click(Sender: TObject); begin //Client.active:=true; ---- вот здесь Client.Address:=IP.text; Client.Socket.SendText('r'); end; А и кстати если client.active:=true; стоит выше Client.Address:=IP.text; то выходит ошибка, а если ниже то все ОК. Хотя я думаю что правильнее было бы если была бы выше. Может здесь напортачил а? |
||||
|
|||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Ну да. Но если файрволлу не сказать "вот с этого порта, открытого в этой программе данные нужно пропускать", то он и не пропустит. Проект без экзешника (только dpr, dfm, pas) - в зип и приаттачить сюда. Пока скажу только, что
так - неправильно. Сперва назначают адрес/порт, потом активируют, клиент должен присоединиться, а уже потом можно отправлять через сокет данные. |
|||
|
||||
| darkida |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 59 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
Ну я дибил. Сам от себя в шоке. Извини Kami что отнял у тебя время. Спасибо. Пздц тупанул, пойду высплюсь. Я ничего не проставил ни в Клиенте, ни в Сервере. А еще бесился на Delphi. Мда проверил пашит собака. Правда пока проставлял еще нашел ошибки.
Исправлю все и еще раз выложу может кому понадобится, хотя в DRKB и так все есть. Ну на всякий может я ни один такой. Спасибо большое. |
|||
|
||||
| darkida |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 59 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
Вот так беда!!!
Почти ведь все провайдеры выдают внутренние локальные IP адреса. Как тогда действуют трояны? У них что свой маршрутизаторы которые могут перекидываться из внешнего во внутренний? Но тогда провайдеры бы сразу отлавливали бы их. И самые защищенные IP адреса - это динамические что ли? Хотя помниться когда сидел на обычном dial upe вирусов было не меньше. Среди которых присутствовали и трояны. Может все таки есть метод программным путем обойти. И вообще ServerSocket c ClientSocket'ом вызывают довольно много хлопот: 1. Просить всех пользователей чтоб бегали к админу, чтоб он настроил им их фаервол и антивириком. 2. Просить всех пользователей чтоб упрашивали провайдеров, чтоб они им сделали "Белый" IP. Это какая должна быть программа, чтоб люди на это согласились. )))). Может я опять поторопился и есть алтернатива Server и ClientSocket'у. Потому что если даже есть вариант обойти эти 2 пункта программным путем то я даже не представляю на сколько он тяжелее написания самой проги. |
|||
|
||||
| darkida |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 59 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
Передача файлов по внешнему ip через Локальную сет,
Здесь FOX пишет:
Так вот она на практике ни черта не транслирует адреса. Прога сразу вылетать будет. Надо что то дополнительно прописывать. |
|||
|
||||
| kami |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Да. Гораздо проще организовать свою локальную сеть, и иметь ограниченное количество "внешних" IP, выделяемых динамически, чем давать каждому пользователю один из дефицитных адресов. А что трояны? "Белый" IP должен быть у сервера. А клиент пусть сидит хоть за десятью маршрутизаторами. Ведь инициатор подключения - это клиент. И всякие маршрутизаторы знают, как "выпустить" его во всемирную паутину (обратное далеко не всегда верно). Трояны - это клиенты. Они знают IP сервера, на который нужно передать информацию с зараженного компьютера, устанавливают соединение... дальше, как я и говорил - проблемы кода, что и когда будет передано. Нет. Самый защищенный адрес - это 127.0.0.1, при условии не-имения других IP. Все остальные - потенциальная уязвимость.
Я открою тебе страшную тайну - на самом деле оба эти компонента - всего лишь обертка над виндовыми функциями работы с сетью. И все имеющиеся на настоящее время компоненты/классы для работы по TCP используют именно их (функции Windows) в той или иной манере. А TServer|ClientSocket - всего лишь минимальная надстройка, позволяющая более-менее удобно работать с соединением.
Это нужно только для компьютера, на котором стоит серверная часть программы. Еще раз - клиент может сидеть хоть за десятью NAT, маршрутизаторами и т.п... Это сообщение отредактировал(а) kami - 26.1.2010, 21:32 |
||||
|
|||||
| darkida |
|
|||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 59 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
Мда похоже я опять ошибался. Потому что планировалось отправлять всем пользователям СЕРВЕР, а самому сидеть как КЛИЕНТ. Ну так по крайней мере в моем кодинге. Хотя ведь по идее разницы нет. СЕРВЕР ведь обладает почти всеми теми же функциями что и КЛИЕНТ. За исключением выбора IP адреса сервера. Но оно и мне надо. Мне легче будет я просто укажу свой IP и все. Я почему то не задумывался над этим. Спасибо ещё раз.
Вот ещё прочитал в нете. Возможно ли это одним из вариантов решения, а именно программным переходом из внешнего во внутренний адрес IP:
|
|||
|
||||
| kami |
|
||||||||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Я так понимаю, что идет разработка программы удаленного доступа?
Если это будет происходить в пределах одного провайдера - то никакие "белые", "внешние" и т.п. IP не нужны, достаточно пользоваться локальными.
После установки соединения разницы нет абсолютно, за исключением одного - TServerSocket может иметь кучу соединений, TClientSocket - только одно.
Это касается конкретных маршрутизаторов, и если провайдер не использует DMZ, никто не заставит его это сделать. Добавлено через 4 минуты и 19 секунд
Ну и внеси изменения, которые не должны повлиять на логику программы: пусть у тебя "белый" IP, и TServerSocket. У пользователей - "серые" IP и TClientSocket. Пусть пользовательские программы через определенные промежутки времени пытаются подключиться к твоему компьютеру. Подключился - пошел обмен, регулируемый тобой, как задавателем логики программы. |
||||||||||
|
|||||||||||
| darkida |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Awaiting Authorisation Сообщений: 59 Регистрация: 9.2.2009 Репутация: нет Всего: нет |
Тока планируется, тем более с моими то знаниями в программирование, это ой как затянется чувствую. ))
Мда такое только не получится. Я в Китае. )) И чувствую на долго здесь. А и кстати у меня тоже здесь локалка, но надеюсь договорится со здешними админами, это проще чем просить всех. ))
Мда это нормально даже. Зато контролить легко наверно будет.
Печально, а я то думал.......... Что это станет пустяшным делом используя её. Ты мне страшно помог. Кроме тебя здесь никто и не пишет то. Только вот тебе не повезло то что я обычный студент, без наворотов и нет возможности отблагодарить деньгами. Но если ты играешь в доту или в покер, то виртуальных бабок жалко не будет. |
||||||||
|
|||||||||
| kami |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1806 Регистрация: 25.8.2007 Где: Санкт-Петербург Репутация: 6 Всего: 72 |
Нормально, программа сетевого администрирования была моим первым серьезным проектом на Delphi, и развивал ее я с 2004 по 2008 Я тоже сделал "через одно место" - в подавляющем большинстве программ этого направления управляемая часть - это сервер, а админ пользуется клиентом. Мне это изначально показалось очень проблематичным, я пошел тем путем, который озвучил тебе. Так как программа позиционировалась для работы в локалке, то это было более чем оправдано для облегчения мне задачи. Добавлено через 57 секунд Удачи! |
|||
|
||||
![]()
|
| Правила форума "Delphi: Сети" | |
|
|
Запрещено: 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делится вскрытыми компонентами
Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Snowy, Poseidon, MetalFan. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |