Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];

Вниз

WinSock   Найти похожие ветки 

 
Случайный прохожий   (2003-02-06 20:52) [0]

Подскажите, пожалуйста, где в и-нете почитать о соккетах.
На моём PC несколько IP-адресов, программно определяю их. Но, как определить, который из них выделенный интернет-провайдером динамически, а не локальный? Следует учесть, что локальный может быть тоже динамическим.


 
Случайный прохожий   (2003-02-06 21:25) [1]

К модератору!
Пожалуйста, переместите мой вопрос в конференцию "Сети".


 
Мазут Береговой   (2003-02-06 21:41) [2]

Собственно, надо смотреть конфигурацию сети, если вручную. По-моему там есть установки типа "динамический адрес" и "статический адрес". Надо пойти в "Settings" -> "Network Connections" -> "... connection" -> "properties" -> "" -> "Networking" -> "TCP/IP" -> "properties" -> "General". Такой путь в Win XP и на dialup. На вкладке "General" есть опции "Obtain an IP address automatically" и "Use following IP Address". Тип адреса зависит от типа соединения. В пункте "... connection" может находиться несколько типов соединений. Проверь их.

А если вычислять их программно, то надо читать регистры. При помощи программы RegEdit можно найти эту конфигурацию.

Возможны небольшие отличия в интерфейсе win2k и XP...


 
Случайный прохожий   (2003-02-06 21:55) [3]


> Мазут Береговой (06.02.03 21:41)

Спасибо за участие.

Я заметил, что при программном определении внешний IP (присвоенный провайдером) в array всегда последний и здесь с этим всё ясно. Но всегда ли это так? Как с очерёдностью присвоения IP будет на других машинах. Или всё же путь единственный - только через реестровый файл? Просто через реестр не очень удобно, т.к. в различных виндах это может находиться в разных ключах.


 
Мазут Береговой   (2003-02-06 22:20) [4]

Все свои конфигурации Win записывает в регистры. Это стандартные системные установки, которые являются "сердцем" совместимости версий. Так что регистрация IP адресов в разных Win будет находится в одинаковых регистрах.


 
Malder   (2003-02-06 22:37) [5]

Случайный прохожий, ты неправильно представляешь логику построения сетевых программ.

Зачем тебе знать IP адрес ?

>как определить, который из них выделенный интернет-провайдером динамически, а не локальный?

Ну определишь допустим... а какая тебе от этого польза ?


 
Случайный прохожий   (2003-02-06 22:46) [6]


> Malder © (06.02.03 22:37)

Польза в том, что мне и мои друзьям нужно на каком-либо сервере размещать ссылку со своим актуальным IP для связи через NetMeeting. Общими сереверами связи не хочется пользоваться из-за того, что существуют нехорошие мальчики, использующие IP размещённые на открытых серверах для атак, в этом я уже убедился.


 
Malder   (2003-02-06 23:13) [7]

Случайный прохожий

1) Используй ICQ

2) Зайди на http://www.no-ip.com/ - ты можешь сделать хостнейм, например, sluchainiy_prohozhiy.zapto.org - и каждый раз назначать ему свой актуальный IP адрес... твоим друзьям стоит только отрезольвить данный хостнейи, чтобы узнать твой IP


 
Случайный прохожий   (2003-02-07 18:08) [8]


> Malder © (06.02.03 23:13)

Да нет, всё не то. Понятно, что есть разные пути для того, чтобы организовать связь. Но всё же, если принципиально заинтересовал этот вопрос, то как его разрешить. На моём PC стоит две сетевых карты: одна используется для моей домашней сети, а другая для ADSL, плюс ещё ISDN Adapter и все они имеют собственный IP. А при установлении соединения с интернет адаптер удалённых соединений получает от сервера моего провайдера динамически выделяемый IP. Таким образом получается четыре IP, например соответственно: 192.168.0.1, 169.254.120.87, 169.254.176.227 и адапт. уд. соед. - 217.237.72.194.
И ещё не понятно, что навело вас на мысль о моём не правильном представлении логики ... .

procedure TForm1.Button1Click(Sender: TObject);
type
TaPInAddr = Array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
phe: PHostEnt;
pptr: PaPInAddr;
Buffer: Array[0..63] of Char;
I: Integer;
GInitData: TWSAData;
begin
WSAStartup($101, GInitData);
Memo1.Clear;
GetHostName(Buffer, SizeOf(Buffer));
Memo1.Lines.Add(Buffer); // HostName
phe := GetHostByName(Buffer);
if phe = nil then Exit;
pPtr := PaPInAddr(phe^.h_addr_list);
I := 0;
while pPtr^[I] <> nil do
begin
Memo1.Lines.Add(inet_ntoa(pptr^[I]^)); //Add IP-addresses
Inc(I);
end;
WSACleanup;
end;
Здесь можно получить все IP адреса, имеющиеся на PC и при этом, IP присвоенный сервером провайдера всегда последний на моей машине. Интересно, будет-ли на других компьютерах IP от интернет-сервера последним? Если нет, то как его определить. Вот это меня и итересует.

Спасибо.


 
Случайный прохожий   (2003-02-07 19:10) [9]

Люди! Есть знающие?


 
Malder   (2003-02-07 20:02) [10]

Случайный прохожий, я тебя не зря спросил, зачем тебе знать IP адрес. Потому что тебе знать его не нужно.

Когда ты коннектишься куда-либо, то интерфейс обслуживющий твое соединение должен выбираться исходя из настроек роутинга, что уже не твоя задача...

>IP присвоенный сервером провайдера всегда последний на моей машине

я бы не полагался на это. Он последний скорее всего потому, что присвоен последним...


 
Anatoly Podgoretsky   (2003-02-07 20:15) [11]

Ну раз тебе известны три ИП из четырех, то методом исключения несложно вычислить оставшийся. А на порядок закладываться не стоит.


 
Случайный прохожий   (2003-02-07 20:22) [12]


> Malder © (07.02.03 20:02)

Всё правильно, если я хочу с кем-нибудь соединиться мне нет необходимости знать мой собственный IP, однако необходимо иметь в распоряжении IP того, с кем устанавливаю соединение через и-нет. Так же, если со мной хочет кто-нибудь установить соединение, то и этом случае он должен знать мой IP. Вот об этом и речь. При чём, разумеется, просто посмотреть свой IP и передать мылом не представляет труда, но уж очень смахивает на забивание гвоздей компьютером. И кроме того, всё-таки, если подойти к вопросу принципиально, должен же быть способ решения этой проблемы.

> Он последний скорее всего потому, что присвоен последним...

Я проверял, для этого специально деактивировал мою домашнюю сеть и уже после соединения с и-нетом снова включил, но и в этом случае IP удалённого соединения оставался последним. Но всё же, я тоже думаю, что на это лучше не полагаться.
Может есть у вас какие-нибудь мысли на этот счёт. Как из множества выявленных адресов определить, который из них принадлежит удалённому соединению?
Не понимаю, почему меня не понимают? Криво выражаюсь?


 
Случайный прохожий   (2003-02-07 20:23) [13]


> Anatoly Podgoretsky © (07.02.03 20:15)

Мне известны все четыре, но который из них применить? Как определить?


 
Случайный прохожий   (2003-02-07 21:02) [14]


> Malder © (06.02.03 22:37)


> Malder © (07.02.03 20:02)

Здесь я конкретнее объясняю, зачем мне нужен мой собственный IP.
Вот ссылка http://www.wnew.de/netmeeting.cnf . Если вы кликните по этой ссылке, то автоматически исполнится маленький скрипт и у вас запустится NetMeeting сразу на мой адрес, таким образом будет установленно соединение. И если вы располагаете микрофоном и может быть даже вебкамерой, то мы сможем поговорить :). Вот и всё.
PS. Если на вашей машине установлен файервэйл, то он может помешать установлению соединения. И, чтобы вы не боялись этого скрипта, то я привожу его здесь:
[ConferenceShortcut]
Address = 217.237.72.194
В данном случае - это мой актуальный IP.


 
Anatoly Podgoretsky   (2003-02-07 21:14) [15]

Ответ простой 217.237.72.194, остальные три [псевдо] локальные.


 
Случайный прохожий   (2003-02-07 21:23) [16]


> Anatoly Podgoretsky © (07.02.03 21:14)
> Ответ простой 217.237.72.194, остальные три [псевдо] локальные.

Да, я то знаю, а вот железяка то не знает. Мне нужно, чтобы это всё было полностью автоматически и не зависимо от того, знаю я мои локальные адреса, или нет. Прсто у меня друзья не совсем такие вумные, как я:), а эта программа будет их IP, так же как и мой размещать на моём хосте, т.е. будет установленна на всех наших компьютерах, а т.к. у нас всех ADSL и нет ограничения по времени, только трафик ограничен 5Гбайт, то мы имеем возможность постоянно находится online, конечно в свободное от работы время.


 
Случайный прохожий   (2003-02-07 21:37) [17]

Ну, что нет смелых испытать видеосвязь? http://www.wnew.de/netmeeting.cnf


 
Malder   (2003-02-07 21:50) [18]

Случайный прохожий, я понял твою проблему.
Теперь твоя очередь =)

Вероятно, ты разделяешь IP адреса (интерфейсы) по которым можно выйти в интернет и по которым нельзя. Но это некорректно.

А если б у тебя был выход в интернет еще и через локалку (особенно если ip masquerade) как тогда быть ? Какой адрес давать для соединения ? А если у тебя два модемных соединения ?
А если в локалке выход только на порты netmeeting"а - это можно считать за интернет ? А если только почта ?

В общем, дам тебе два совета:

1) Если хочешь реализовать свою идею... Перебирай все интерфейсы, прибиндивай к ним свой сокет и пытайся связаться с каким-либо сервером (например, wnew.de). Если свяжешься - то выкладывай там IP адрес интерфейса через который удалось выйти в интернет.

2) А вообще для этих целей в интернете есть сервера с постоянными IP адресами. Если тебе не нравится безопасность NetMeeting - используй IRC сети, ICQ...


 
Случайный прохожий   (2003-02-07 21:51) [19]

Ну хорошо. Идей нет. Может быть подскажете, где почитать. Я искал в и-нете, но ничего путёвого не нашёл. Возможно кто-нибудь знает ссылки на описания соккетов?


 
Случайный прохожий   (2003-02-07 21:56) [20]


> Malder © (07.02.03 21:50)


> 1) Если хочешь реализовать свою идею... Перебирай все интерфейсы,
> прибиндивай к ним свой сокет и пытайся связаться с каким-либо
> сервером (например, wnew.de). Если свяжешься - то выкладывай
> там IP адрес интерфейса через который удалось выйти в интернет.

У меня тоже возникала такая идея, но мне показалась она не очень красивой. Я полагал, что существует какой-нибудь отработаный способ. Ну, чтож, буду делать именно так.
Спасибо.


 
Malder   (2003-02-07 22:04) [21]

Случайный прохожий, насчет элегантности идеи - ты прав.

Тогда связывайся с сервером, а потом смотри через какой интерфейс тебя пустили...

или можно просматривать таблицу роутинга для определения какой IP адрес используется для внешшних соединений...

вообще, если подумать вариантов куча...


Только они все неправильные =) см. выше


 
Мазут Береговой   (2003-02-07 22:08) [22]

По-моему у ServerSocket есть проперти RemoteAddress и RemotePort, которые дают адрес и порт клиента который подсоединился к сокету. Может это поможет...


 
Случайный прохожий   (2003-02-07 22:15) [23]


> Мазут Береговой (07.02.03 22:08)

Позже погляжу, сейчас к сожалению нужно срываться на работу. Работаю в ночьную смену :(
Спасибо.


 
Мазут Береговой   (2003-02-07 22:17) [24]

Да, забыл сказать, ServerSocket слушает все адреса на компе, но по одному (указанному) порту. Если у вас статический адрес для подключения к интернету и есть возможность добавить адрес, то добавьте и пусть клиентские части конектятся к нему...


 
Случайный прохожий   (2003-02-07 22:28) [25]

Я вообще то кое-чего начитался по ServerSocket и ClientSocket, но упёрся в компоненту WinSock, мне показалось, что с WinSock на много проще реализовать мою идею, а ServerSocket я как то серьёзно и не рассматривал. Возможно, что - это моя ошибка. Хотя мне ведь не нужно создавать новое соединение клиент-сервер-клиент.

Mit freundlichen Gr


 
Malder   (2003-02-07 22:46) [26]

А при чем вообще ServerSocket ?!

Чтобы приконнектиться к ServerSocket нужно знать IP адрес машины =) а вот это как раз и неизвестно


 
Мазут Береговой   (2003-02-08 00:53) [27]

WinSock - это компонент MicroSoft библиотеки (WinSock.dll Winsock32.dll). Использовался в Borland Delphi до 4 версии. Ну, а ServerSocket/ClientSocket это уже компонент от Borland.
В Borland доступ к проперти: ...:=ServerSocket.Socket.RemoteAddr;
И если соединение к интернету создается с динамическим адресом, то клиент ваш как может узнать ваш адрес, который все время разный? Вам нужно коннектиться куда-нибудь, что бы передать свой IP...


 
Malder   (2003-02-08 13:53) [28]

Мазут Береговой, а вы вообще читаете здесь что-нибудь кроме своих постов ? Конечно, коннектиться надо, например к серверу wnew.de, который используется Случайным прохожим как доска объявлений (если правильно понимаю)

Или вы хотите разместить приложение с ServerSocket на wnew.de ?


 
Мазут Береговой   (2003-02-09 00:49) [29]

Читаю. Только у меня нет видео устройств. Прохожий спросил про сокеты, я ответил.

Если хочешь получить правильный ответ - задай правильный вопрос.


 
Случайный прохожий   (2003-02-09 03:14) [30]


> Мазут Береговой (09.02.03 00:49)


> Если хочешь получить правильный ответ - задай правильный
> вопрос.

Совершенно, не понимаю, что вам не нравится в моём вопросе.


> Мазут Береговой (08.02.03 00:53)
> WinSock - это компонент MicroSoft библиотеки (WinSock.dll
> Winsock32.dll). Использовался в Borland Delphi до 4 версии.
> Ну, а ServerSocket/ClientSocket это уже компонент от Borland.

Странно, у меня шестой Delphi и WinSock есть.


> Malder © (06.02.03 22:37)
> Случайный прохожий, ты неправильно представляешь логику
> построения сетевых программ.
> Зачем тебе знать IP адрес ?

Не понимаю, что есть неправильно в моих рассуждениях о распределении IP-адресов.
IP-адреса внутри своей, домашней сети я могу распределить вручную или поручить это DHCP серверу. Разумеется, нет необходимости использовать DHCP для сети, состоящей из трёх компьютеров, а коль это так, то уже становиться ясно, что мне известны заранее адреса всех машин включенных в сеть. И вопрос я ставил вовсе не потому, что я не могу определить адрес присвоенный мне моим провайдером: суть вопроса в том, как определить программно, которые из адресов присвоил DHCP моего компьютера, который выполняет роль сервера в моей собственной сети, а который из адресов присвоен DHCP-сервером моего провайдера.
Для чего мне это нужно? Вопрос второстепенный, не играющий, абсолютно, никакой роли. Просто, я к этому подхожу с той стороны, что не все задачи могут иметь прикладное значение, но рано или поздно наступает время, когда находится применение решений этих задач. Но и здесь всё выглядит не так: для чего мне нужен IP я уже объяснял, можно, к примеру, использовать собственный компьютер в качестве FTP или HTTP сервера в глобальной сети, для чего достаточно всегда обновлять ссылку на сервер актуальным IP-адресом. Конечно, мне известно, что существуют сервера и для видео-чатов, и DHCP-сервера, которые каждый раз привязывают Domain Name к актуальному IP. Но неужели плохо, если всяких узлов, инстанций, от которых зависишь, меньше? Кроме того, при изучении языков программирования, считается нормальным вновь, и вновь писать текстовые редакторы, многие пишут для себя файловые менеджеры. Что, плохи существующие? Вот и здесь, считаю вопрос излишним. А для того, чтобы доказать, что я пытыюсь изобрести велосипед, как и многие другие, вот ссылка на программу, которая выполняет совершенно точно то, что мне, почему-то, хочется зделать самому.
Конечно спасибо вам за участие, но думаю не нужно демонстрировать свои зелёные или чёрные пояса. Или это главное отличие форума на "мастаках". Просто здесь желательно учитывать то, что не все имеют одинаковые стартовые возможности. К примеру, я первый раз увидел настоящий компьютер, когда мне было уже 26, да и то всего лишь увидел :) А программированием занялся сам, нигде не учился и спросить было некого: жил в маленьком посёлочке. И здесь в Германии варюсь в собственном соку и в кои-то веки решил спросить проффесионалов и получил пяткой в челюсть.
Лучше и дальше самому!
С наилучшими пожеланиями
Владимир Михеев


 
Случайный прохожий   (2003-02-09 03:19) [31]

Забыл вставить ссылку, вот она: http://lab1.de/prod/pmip/index.htm


 
Alex Konshin   (2003-02-09 08:59) [32]

Послушай, ты сам виноват. Я вот только сейчас читаю этот вопрос и то от большой скуки. Твой вопрос выглядит как "где почитать про Winsock?", и видно, что много народу чего-то наотвечало. Я посчитал, что мое участие тут не требуется. Думаю, что многие подумали так же. Так что, в который раз - "задай правильно вопрос..."
Совет простой - если есть свой домейн и свой DNS, то размести всех своих друзей в этом DNS.
Второй совет: бери ip того интрефейса, через который идет роутинг на некий адрес в интернете (я НЕ предлагаю пинговать его). Попробуй SIO_FINDROUTE
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsock/winsock/wsaioctl_2.asp
Никогда не пробовал, но вроде должно. Короче копай дальше.
Если не получится, то тогда смотри iphlp API, там много интересных функций на эту тему, например:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/getbestinterface.asp


 
Мазут Береговой   (2003-02-09 09:57) [33]


> Случайный прохожий (09.02.03 03:14)
> > Мазут Береговой (09.02.03 00:49)
> > Если хочешь получить правильный ответ - задай правильный
> > вопрос.
> Совершенно, не понимаю, что вам не нравится в моём вопросе.
> > Мазут Береговой (08.02.03 00:53)
> > WinSock - это компонент MicroSoft библиотеки (WinSock.dll
> > Winsock32.dll). Использовался в Borland Delphi до 4 версии.
> > Ну, а ServerSocket/ClientSocket это уже компонент от Borland.
> Странно, у меня шестой Delphi и WinSock есть.


Брат... хотел помочь, а выходит наоборот.
1. Я к тому это сказал, что Malder на меня наехал. Ну, пусть я не понял вопроса, но это ведь не значит, что надо сразу "ты читаешь только свои постинги". И вообще эта фраза не к тебе... Это я так сказал... послесловие, что бы не матерно...

2. Delphi я начал пользовать с 5 версии, поэтому не знаю что было до того. Информацию я эту нашел на интернете. А WinSock использую в VB 6.0. Видимо в 5 и выше версиях Borland сделали свой компонент для удобства. Но ведь они не отменяли COM поэтому ты и видишь Майкрософтовский Winsock (как DLL) и Борландовский компонент.

Если я показался тебе с черным поясом, то извини... :)))
Хотел просто помочь. Я сейчас правлю один проект, который построен на сокетах, поэтому кое-что знаю. Но только кое-что. А вообще, сокеты - хитрая штука. Я тут пытался вызнать как сделать прием и передачу сразу в одной процедуре, так все молчат как партизаны. Как передавать и принимать текстовые данные по сокетам в одной процедуре - просто. А вот как насчет буфера и несинхронного сокета никто не знает. А вообще, я тоже не асс. И на некоторые вопросы уходит много времени. Но спасает интернет - просто море информации надо только найти...


 
Ketmar   (2003-02-09 15:35) [34]

>Мазут Береговой (09.02.03 09:57)
маленький оффтопик: а нафига нужны эти async sockets? это изобретение некрософта времен Win3.11, когда про многопоточность можно было только мечтать. и то втихаря на кухне...

Satanas Nobiscum! 09-Feb-XXXVIII A.S.


 
Случайный прохожий   (2003-02-09 17:57) [35]


> Malder ©


> Мазут Береговой

Прошу прощения за бурчание не по делу. Просто неделя ночной смены сильно выматывает, крыша начинает ехать.

С проблемой я справился,
> Alex Konshin ©
дал правильную наводку. Спасибо!
То, что мне нужно здесь http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iphlp/iphlp/ip_adapter_info.asp


 
Polevi   (2003-02-09 19:47) [36]

>Ketmar © (09.02.03 15:35)
Не согласен категорически, создавать доп. кодовые потоки накладно очень для ОС, асинхронный режим улучшает производительность, особенно при большом колве клиентов (прокси сервер). Пул потоков может помочь, но переключений контекстов все равно не избежать.


 
Ketmar   (2003-02-09 20:00) [37]

>Polevi © (09.02.03 19:47)
вопрос спорный. я всегда считал с точностью до наоборот, если честно. в реальности -- надо бы написать сервер и проверить его на паре сотен клиентов, но лень.

Satanas Nobiscum! 09-Feb-XXXVIII A.S.


 
Polevi   (2003-02-09 20:04) [38]

я проверял, на примере прокси-сервера с 100 клиентов на P133 разница заметна


 
Ketmar   (2003-02-09 20:09) [39]

>Polevi © (09.02.03 20:04)
ладно. согласен %-)
но всё равно мне потоки удобнее %-))

Satanas Nobiscum! 09-Feb-XXXVIII A.S.



Страницы: 1 вся ветка

Форум: "Потрепаться";
Текущий архив: 2003.02.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.58 MB
Время: 0.009 c
1-76007
dmk
2003-02-11 21:54
2003.02.24
FocusedControl


1-76030
Maxik777
2003-02-13 16:00
2003.02.24
И снова о выборе директории


3-75776
Ламер
2003-02-05 13:47
2003.02.24
Почему прога под Интербейс не хочет работать под делфями?


14-76110
ZeroDivide
2003-02-06 15:28
2003.02.24
Они что все тупые?


1-75884
Xmen
2003-02-14 06:49
2003.02.24
Помогите! Как определить размер файла?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский