tServerSocket.OnClientConnect-кога е от localhost?
12 отговора
240 прегледа
tServerSocket.OnClientConnect-кога е от localhost?
tServerSocket.OnClientConnect - кога конектът е от клиент на localhost?
Изглежда елемнтарно и много лесно мога да проверя
tServerSocket.OnClientConnect(Sender: TObject; aSocket: TCustomWinSocket);
if aSocket.LocalAddress='127.0.0.1'
и сигурно в над 90% от случеите ще работи, но може би има и маса частни случеи.
Мога да проверявам и дали LocalAddress и RemoteAddress са равни.
Потърсхи в гугъла - не намерих нещо интересно.
Та ако споделите опит и знания - ще е много полезно за мен
Въобще, откакто се наложи половин ден да налучкваме едни чертички пред името на com порта съм станал много параноичен :)
Изглежда елемнтарно и много лесно мога да проверя
tServerSocket.OnClientConnect(Sender: TObject; aSocket: TCustomWinSocket);
if aSocket.LocalAddress='127.0.0.1'
и сигурно в над 90% от случеите ще работи, но може би има и маса частни случеи.
Мога да проверявам и дали LocalAddress и RemoteAddress са равни.
Потърсхи в гугъла - не намерих нещо интересно.
Та ако споделите опит и знания - ще е много полезно за мен
Въобще, откакто се наложи половин ден да налучкваме едни чертички пред името на com порта съм станал много параноичен :)
Редактирано от NikB на
Re: tServerSocket.OnClientConnect-кога е от localhost?
Не знам решение, но мога да дам някои идеи.
Като напишеш route print в предпоследната колона Interface може да видиш различните IP адреси (повтарят се), които са локални.
За всяка мрежова карта, модем и др. под. трябва да има различен адрес в различна подмрежа (подмрежата не е от значение в случая) за да работи TCP/IP.
Не знам, ако твоя адрес е напр. 192.168.1.100 и се свържеш от него, дали aSocket.LocalAddress='127.0.0.1' ? Или RemoteAddress трябва да се гледа?
Ако не -- трябва да намериш някой компонент, който ти дава всички локални мрежови интерфейси и да проверяваш дали е някой от тях. Между другото в по-новите Windows-и вадене на мрежовия кабел IP адреса изчезва, а при пъхане се появява, същото е и за dial-up. Също адреса може да се променя. Тъй че всеки път трябва да се проверява кои са локалните мрежови интерфейси.
LocalAddress и RemoteAddress да са равни не е критерий.
Като напишеш route print в предпоследната колона Interface може да видиш различните IP адреси (повтарят се), които са локални.
За всяка мрежова карта, модем и др. под. трябва да има различен адрес в различна подмрежа (подмрежата не е от значение в случая) за да работи TCP/IP.
Не знам, ако твоя адрес е напр. 192.168.1.100 и се свържеш от него, дали aSocket.LocalAddress='127.0.0.1' ? Или RemoteAddress трябва да се гледа?
Ако не -- трябва да намериш някой компонент, който ти дава всички локални мрежови интерфейси и да проверяваш дали е някой от тях. Между другото в по-новите Windows-и вадене на мрежовия кабел IP адреса изчезва, а при пъхане се появява, същото е и за dial-up. Също адреса може да се променя. Тъй че всеки път трябва да се проверява кои са локалните мрежови интерфейси.
LocalAddress и RemoteAddress да са равни не е критерий.
Route print с изключване на кабела :)
Да, прав си - така изглежда Route при изключване на кабела на мрежата (WinXP)
Благодаря за мнението :), въпросът остава открит.
Благодаря за мнението :), въпросът остава открит.
Редактирано от NikB на
Re: tServerSocket.OnClientConnect-кога е от localhost?
Отвори един command prompt, напиши ping localhost и ще видиш на кое IP ти отговаря localhost-а.
Процеса се нарича reverse lookup, ако се не лъжа. Компонент със сорс, който върши работата (или поне така твърди, аз не съм го пробвал) има на [линк]
Тамън ще провериш дали нещата бачкат.
чети и дишай по-леко
Процеса се нарича reverse lookup, ако се не лъжа. Компонент със сорс, който върши работата (или поне така твърди, аз не съм го пробвал) има на [линк]
Тамън ще провериш дали нещата бачкат.
чети и дишай по-леко
Re: Route print с изключване на кабела :)
Пак да питам с твойте IP-та:
Когато в клиента се конектваш към:
1) 192.168.1.11
2) 212.56.24.49
Тогава при OnConnect какъв ти е RemoteAddress в твоя сървър?
Когато в клиента се конектваш към:
1) 192.168.1.11
2) 212.56.24.49
Тогава при OnConnect какъв ти е RemoteAddress в твоя сървър?
Re: tServerSocket.OnClientConnect-кога е от localhost?
Трябва ти GetAdaptersInfo от
[линк]
Help:
[линк]
[линк]
Help:
[линк]
Направих го, май не ми е ясно :)
Направих го, май не ми е ясно :)
Съзадох си рънтайм един TSocketHostLookup (не съм го инсталирал)
Конектвам се към 127.0.0.1, 192.168.1.11 и на 212.56.24.49 - винаги ми връща че броят на адресите е AddressCount=1 (може би това е броя на MAC адресите на моята машина) и че AddressStr[0] е съответния адрес.
От фаервола виждам активност по порта за DNS
Мога да ти изпратя готовия демо проект на Д5.
Съзадох си рънтайм един TSocketHostLookup (не съм го инсталирал)
Конектвам се към 127.0.0.1, 192.168.1.11 и на 212.56.24.49 - винаги ми връща че броят на адресите е AddressCount=1 (може би това е броя на MAC адресите на моята машина) и че AddressStr[0] е съответния адрес.
От фаервола виждам активност по порта за DNS
Мога да ти изпратя готовия демо проект на Д5.
Винаги и двата адреса (RemoteAddress и LovcalAddre
Винаги и двата адреса (RemoteAddress и LovcalAddress) са еднакви и са този, на който отварям порта (и на клиента и на сървъра).
Не успях да изтегля jedi.org...IPHlpAPI
Не успях да изтегля jedi.org...IPHlpAPI.zip, но утре ще разгледам [линк]
Тая функцийка ми връща спистък с ползваните от локалхоста IP адреси.
Не ми е ясно защо в списъка липсва 127.0.0.1 и дали тоя 127.0.0.1 може да бъде сменен с нещо друго.
Тая функцийка ми връща спистък с ползваните от локалхоста IP адреси.
Не ми е ясно защо в списъка липсва 127.0.0.1 и дали тоя 127.0.0.1 може да бъде сменен с нещо друго.
{}function Get_IP_Strings: TStrings;
type
TaPInAddr = array[0..10] of PInAddr;
PaPInAddr = ^TaPInAddr;
var
WSAData : TWSAData;
phe : PHostEnt;
pptr : PaPInAddr;
Name : array [0..$FF] of Char;
J : Integer;
err : integer;
begin
Result := nil;
try
err:=WSAStartup($0101, WSAData);
if (err=0) then begin
try
GetHostName(Name, SizeOf(Name));
phe := GetHostByName(Name);
if phe<>nil then begin
pPtr := PaPInAddr(phe^.h_addr_list);
J := 0;
Result := tStringList.Create;
while pPtr^[J] <> nil do begin
Result.Add(inet_ntoa(pptr^[J]^));
Inc(J);
end;
end;
finally
WSACleanup;
end;
end;
except
end;
end;
Re: Направих го, май не ми е ясно :)
Чакай сега че и аз се обърках
Значи аз мисля че на теб ти трябва следното нещо (ако греша ме поправяй):
1) на localhost отговаря едно IP. Това IP можеш да го видиш и като от command promt напишеш:
ping localhost
Това трябва да ти върне нещо от сорта (за моя комп например):
Pinging pc_emo [127.0.0.1] with 32 bytes of data:
...
Демек 127.0.0.1 е IP-то на localhost
2) когато твоята програма получи заявка ти получаваш от кое IP е заявката
3) твоята програма иска да знае дали IP-то от което е заявката е IP-то на localhost
Какво следва да направиш:
1) При старт на програмата да вземеш IP-то на localhost чрез компонента дето ти пратих, демек да му подадеш като параметър localhost и да получиш например 127.0.0.1
2) При заявка от клиента да сравниш IP-то от което идва заявката с IP-то от 1)
чети и дишай по-леко
Значи аз мисля че на теб ти трябва следното нещо (ако греша ме поправяй):
1) на localhost отговаря едно IP. Това IP можеш да го видиш и като от command promt напишеш:
ping localhost
Това трябва да ти върне нещо от сорта (за моя комп например):
Pinging pc_emo [127.0.0.1] with 32 bytes of data:
...
Демек 127.0.0.1 е IP-то на localhost
2) когато твоята програма получи заявка ти получаваш от кое IP е заявката
3) твоята програма иска да знае дали IP-то от което е заявката е IP-то на localhost
Какво следва да направиш:
1) При старт на програмата да вземеш IP-то на localhost чрез компонента дето ти пратих, демек да му подадеш като параметър localhost и да получиш например 127.0.0.1
2) При заявка от клиента да сравниш IP-то от което идва заявката с IP-то от 1)
чети и дишай по-леко
Това трябва да е :)
Просто предлагаш да се вземе адреса на хост с име "localhost".
Благодаря, това трябва да е :)
Благодаря, това трябва да е :)