Форум: "Сети";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
ВнизШироковещательный UDP запрос Найти похожие ветки
← →
Михаил (Питер) (2008-03-07 10:25) [0]Есть два приложения, одно клиент, другое сервер. Клиент посылает широковещательный UDP запрос с помощью IdUDPClient. Если оба приложения расположены на одном компьютере, то всё нормально и запрос сервером нормально принимается и обрабатывается. Но вот, если на разных, запрос уходит, но сервером не воспринимается. Я знаю, что коммутатор может не пропускать такие запросы, поэтому компьютеры соединил прямым кроссовым кабелем. Фаерволов на компьютерах не установлено (Правда на одном стоит Каспер. Может в этом дело? Мой препод говорит, что врядли это из-за антивируса). В чём может быть проблема? Помогите, Мастера
← →
Сергей М. © (2008-03-07 10:36) [1]
> знаю, что коммутатор может не пропускать такие запросы
Коммутатору-то как раз глубоко фиолетово содержимое сетевых пакетов, так что эксперимент с прямым соединением был лишним.
Если ошибок в программе нет (что вряд ли), то дело, скорей всего, в ненастроенной или неверно настроенной маршрутизации.
По поводу ошибок - уточни к каким сетевым интерфейсам биндятся твои сервер и клиент ..
← →
medved_68 (2008-03-07 10:38) [2]
> Я знаю, что коммутатор может не пропускать такие запросы,
> поэтому компьютеры соединил прямым кроссовым кабелем.
И при этом расшаренные на одном компе папки видны на другом, и можно обмениваться файлами?
> Фаерволов на компьютерах не установлено
Брандмауэр включен? И если да - то в исключениях стоит Борланд сокеты?
← →
Сергей М. © (2008-03-07 10:41) [3]
> в исключениях стоит Борланд сокеты?
Какие такие "Борланд сокеты" ?
Брандмауер знать не знает и знать не обязан ни про какой борланд с его сокетами.
← →
medved_68 © (2008-03-07 10:49) [4]
> Какие такие "Борланд сокеты" ?
Borland Socket Server :))
> Брандмауер знать не знает и знать не обязан ни про какой
> борланд с его сокетами.
Знать то он не обязан, а вот блокировать..... :)
← →
Сергей М. © (2008-03-07 10:52) [5]
> Borland Socket Server
А он-то тут причем ?
← →
medved_68 © (2008-03-07 11:01) [6]
> А он-то тут причем ?
> Но вот, если на разных, запрос уходит, но сервером не воспринимается.
Я так понял, что переносит исполняемый файл допустим сервера, на другую машину (к примеру на ней нет предустановленной Дельфи и в исключениях брандмауэра нет этого пункта, опять телепатия :) ). Тогда при запуске приложения (если не включена опция предупреждения о блокировке (или вырублено, чтобы не раздражало :) ) будет просто заблокировано без всяких уведомлений. :) Но мне все таки подозрительно:
> поэтому компьютеры соединил прямым кроссовым кабелем
Сергей, заметь, не оверкроссовым, а прямым..... :))
← →
Сергей М. © (2008-03-07 11:10) [7]
> переносит исполняемый файл допустим сервера, на другую машину
Ну переносит. Но BSS-то причем ? Его приложение не имеет ничего общего с приложением BSS.
> не оверкроссовым, а прямым
Под прямым, скорей всего, имелось ввиду соединение напрямую, а не через хаб.
Ессно разводка кабеля при этом д.б. кроссовой, а не прямой.
У меня пока устойчивое подозрение на программные ошибки - приемник бродкастов не привязан тому интерфейсу, через который поступают бродкасты.
← →
medved_68 © (2008-03-07 11:19) [8]
> Но BSS-то причем ? Его приложение не имеет ничего общего
> с приложением BSS.
> с помощью IdUDPClient.
Хм....у меня при снятии галки с BSS блокирует что TServer/ClientSocket, что Indy......посему на это и подумалось навскидку. :)
> У меня пока устойчивое подозрение на программные ошибки
> - приемник бродкастов не привязан тому интерфейсу, через
> который поступают бродкасты.
Возможно, даже очень, но:
> Если оба приложения расположены на одном компьютере, то
> всё нормально и запрос сервером нормально принимается и
> обрабатывается.
просто хотелось выяснить:
> Я знаю, что коммутатор может не пропускать такие запросы,
> поэтому компьютеры соединил прямым кроссовым кабелем. Фаерволов
> на компьютерах не установлено (Правда на одном стоит Каспер.
> Может в этом дело? Мой препод говорит, что врядли это из-
> за антивируса).
а сеть то между двумя компами вообще функционирует? И если да - то тогда уже копать программу. :)
← →
Сергей М. © (2008-03-07 11:47) [9]Осталось выслушать самого начальника транспортного цеха)
← →
Михаил (Питер) (2008-03-07 18:13) [10]Брандмауэр выключен как служба (т.е. вообще эта служба не запускается). Кабель, конечно, оверкросовый. Сначалдо пробовал через коммутатор - та же история. Ща выложу часть кода программы, но я вроде всё делала в соответствии с учебником, поэтому, сомневаюсь, что есть программные ошибки, так как там ничего сверхсложного нет. Думаю, что всё-таки что-то с настройками системы
Вот код сервера:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdBaseComponent, IdComponent, IdUDPBase, IdUDPServer, IdSocketHandle, StdCtrls,
ExtCtrls, Buttons;
type
TSetup = record
Mask: String;
Punkt: Integer;
end;
TAct = record
Head: String;
Buffer: Boolean;
Msg: String;
end;
TParam = record
IP: String;
MAC: String;
end;
TServ = record
Position: integer;
Act: TAct;
Setup: TSetup;
Param: TParam;
end;
type
TForm1 = class(TForm)
IdUDPServer1: TIdUDPServer;
Memo1: TMemo;
Timer1: TTimer;
BitBtn1: TBitBtn;
RadioGroup1: TRadioGroup;
procedure IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
procedure BitBtn1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure RadioGroup1Click(Sender: TObject);
procedure IdUDPServer1Status(ASender: TObject;
const AStatus: TIdStatus; const AStatusText: String);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
serv: TServ;
implementation
{$R *.dfm}
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
ABinding: TIdSocketHandle);
var LMsg: String;
begin
If AData.Size<>0 then
begin
SetLength(LMsg,AData.Size);
AData.ReadBuffer(LMsg[1],Length(LMsg));
serv.Act.Msg:=LMsg;
serv.Act.Buffer:=true;
// Memo1.Lines.Add(LMsg);
end;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
serv.Position:=1;
Timer1.Enabled:=True;
end;
procedure TForm1.Timer1Timer(Sender: TObject);
var i,Count: Integer;
StrP,TIp,TMac: String;
fIn: TextFile;
flag: Boolean;
begin
Case serv.Position of
1:begin
IdUDPServer1.Active:=true;
Memo1.Lines.Add("Ïåðåâîä ñåòåâîãî àäàïòåðà â ðåæèì ïåðåõâàòà");
end;
4:begin
IdUDPServer1.Active:=true;
Memo1.Lines.Add("Íàñòðîéêà ôèëüòðà íà ïðè¸ì òîëüêî ARP ïàêåòîâ");
serv.Setup.Mask:="ARP";
serv.Act.Head:=serv.Setup.Mask;
serv.Setup.Punkt:=0;
end;
5:begin
if serv.Setup.Punkt=0 then begin Memo1.Lines.Add(""); serv.Setup.Punkt:=3; end;
StrP:="";
for i:=1 to serv.Setup.Punkt do StrP:=StrP+".";
if serv.Setup.Punkt=5 then serv.Setup.Punkt:=0;
inc(serv.Setup.Punkt);
Memo1.Lines[Memo1.Lines.Count-1]:="Ïðè¸ì ARP ïàêåòa"+StrP;
// Memo1.Lines.Add("Ïðè¸ì ARP ïàêåòa...");
if serv.Act.Buffer then
begin
serv.Act.Buffer:=false;
if Copy(serv.Act.Msg,1,3)="ARP"
then begin Delete(serv.Act.Msg,1,3); Memo1.Lines.Add("Ïîëó÷åí ARP ïàêåò") end
else dec(serv.Position);
end
else
dec(serv.Position);
end;
6:begin
Memo1.Lines.Add("Èçâëå÷åíèå MAC è IP àäðåñîâ");
Count:=0;
for i:=1 to Length(serv.Act.Msg) do
if serv.Act.Msg[i]=":" then Count:=i;
serv.Param.IP:=Copy(serv.Act.Msg,1,count-1);
serv.Param.MAC:=Copy(serv.Act.Msg,count+1,Length(serv.Act.Msg)-count);
end;
7:begin
Memo1.Lines.Add("Ïðîâåðêà ñîîòâåòñòâèÿ MAC è IP àðåñîâ ïî èñòèííîé áàçå äàííûõ");
AssignFile(fIn,"IPMAC.bas");
Reset(fIn);
flag:=false;
while not EoF(fIn) do
begin
readln(fIn,TMac);
readln(fIn,TIp);
flag:=(TMac=serv.Param.MAC)and(TIp=serv.Param.IP) or flag;
end;
CloseFile(fIn);
if flag
then Memo1.Lines.Add("IP è MAC àäðåñà ñîîòâåòñòâóþò äðóã äðóãó => àòàêà íå îáíàðóæåíà")
else Memo1.Lines.Add("Îáíàðóæåíà àòàêà!!! Ëîæíûé IP:""+serv.Param.IP+"", ëîæíûé MAC:""+serv.Param.MAC+""");
end;
8:begin
idUDPServer1.Active:=false;
end;
end;
inc(serv.Position);
if serv.Position=20 then
begin
Timer1.Enabled:=false;
serv.Position:=0;
exit;
end;
end;
procedure TForm1.RadioGroup1Click(Sender: TObject);
begin
If RadioGroup1.ItemIndex=0 then Timer1.Interval:=200 else Timer1.Interval:=2000;
end;
procedure TForm1.IdUDPServer1Status(ASender: TObject;
const AStatus: TIdStatus; const AStatusText: String);
begin
end;
end.
порт установлен 9898 в настройках самого сервера
← →
Михаил (Питер) (2008-03-07 18:13) [11]Вот клиент:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Buttons, StdCtrls, IdBaseComponent, IdComponent, IdUDPBase,
IdUDPClient, ExtCtrls;
type
TForm1 = class(TForm)
Panel1: TPanel;
Label2: TLabel;
SpeedButton1: TSpeedButton;
MAC1: TEdit;
IdUDPClient1: TIdUDPClient;
IP1: TEdit;
IP2: TEdit;
IP3: TEdit;
IP4: TEdit;
Label1: TLabel;
MAC2: TEdit;
MAC3: TEdit;
MAC4: TEdit;
MAC5: TEdit;
MAC6: TEdit;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
procedure SpeedButton1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
IP,MAC: String;
implementation
{$R *.dfm}
procedure TForm1.SpeedButton1Click(Sender: TObject);
var str: String;
begin
str:=IP1.Text;
If (StrToInt(str)>255)or(StrToInt(str)<0) then
begin
Application.MessageBox("IP àäðåññ ââåä¸í íåïðàâèëüíî","Îø ;èáêà",MB_ICONERROR);
exit;
end;
IP:=str;
str:=IP2.Text;
If (StrToInt(str)>255)or(StrToInt(str)<0) then
begin
Application.MessageBox("IP àäðåññ ââåä¸í íåïðàâèëüíî","Îø ;èáêà",MB_ICONERROR);
exit;
end;
IP:=IP+"."+str;
str:=IP3.Text;
If (StrToInt(str)>255)or(StrToInt(str)<0) then
begin
Application.MessageBox("IP àäðåññ ââåä¸í íåïðàâèëüíî","Îø ;èáêà",MB_ICONERROR);
exit;
end;
IP:=IP+"."+str;
str:=IP4.Text;
If (StrToInt(str)>255)or(StrToInt(str)<0) then
begin
Application.MessageBox("IP àäðåññ ââåä¸í íåïðàâèëüíî","Îø ;èáêà",MB_ICONERROR);
exit;
end;
IP:=IP+"."+str;
str:=MAC1.Text;
If str="" then
begin
Application.MessageBox("MAC àäðåññ ââåä¸í íåïðàâèëüíî","Îø ;èáêà",MB_ICONERROR);
exit;
end;
MAC:=str;
str:=MAC2.Text;
If str="" then
begin
Application.MessageBox("MAC àäðåññ ââåä¸í íåïðàâèëüíî","Îø ;èáêà",MB_ICONERROR);
exit;
end;
MAC:=MAC+"-"+str;
str:=MAC3.Text;
If str="" then
begin
Application.MessageBox("MAC àäðåññ ââåä¸í íåïðàâèëüíî","Îø ;èáêà",MB_ICONERROR);
exit;
end;
MAC:=MAC+"-"+str;
str:=MAC4.Text;
If str="" then
begin
Application.MessageBox("MAC àäðåññ ââåä¸í íåïðàâèëüíî","Îø ;èáêà",MB_ICONERROR);
exit;
end;
MAC:=MAC+"-"+str;
str:=MAC5.Text;
If str="" then
begin
Application.MessageBox("MAC àäðåññ ââåä¸í íåïðàâèëüíî","Îø ;èáêà",MB_ICONERROR);
exit;
end;
MAC:=MAC+"-"+str;
str:=MAC6.Text;
If str="" then
begin
Application.MessageBox("MAC àäðåññ ââåä¸í íåïðàâèëüíî","Îø ;èáêà",MB_ICONERROR);
exit;
end;
MAC:=MAC+"-"+str;
IdUDPClient1.Send("ARP"+IP+":"+MAC);
end;
end.
порт тоже в настройках стоит 9898, а свойство Active сразу в True, свойство BroadcastEnabled тоже в True
← →
Сергей М. © (2008-03-07 20:59) [12]Ну и зачем ты эту кучу говна вывалил сюда ?)
От тебя и требовалось всего-то - изложить свои соображения насчет привязки твоего клиента и/или сервера к сетевым интерфейсам.
Только не говори, что ни ты ни препод не знаете что это за звери)
← →
DiamondShark © (2008-03-10 13:55) [13]Что-то я не вижу здесь "Клиент посылает широковещательный UDP запрос с помощью IdUDPClient".
Единственная содержательная строчка "IdUDPClient1.Send("ARP"+IP+":"+MAC);" никакого такого широковещательного запроса не посылает.
← →
medved_68 © (2008-03-11 09:02) [14]
> Единственная содержательная строчка "IdUDPClient1.Send("ARP"+IP+":
> "+MAC);" никакого такого широковещательного запроса не посылает.
>
:))) Автор думает иначе.IdUDPClient1.Broadcast("Hello",10000);
???
← →
Михаил (Питер) (2008-03-11 12:30) [15]В книге было написано, что если поле с местом назначения запроса не указано, то запрос будет широковещательным..
← →
Сергей М. © (2008-03-11 13:37) [16]
> Михаил (Питер) (11.03.08 12:30) [15]
Ты вообще какую версию Инди мучаешь ?
Если 9-ку, то книгу эту, если она именно про 9-ку, выкинь в корзину.
← →
Михаил (Питер) (2008-03-11 13:52) [17]а почему тогда на одном компьютере два приложения нормально функционируют через такие как у меня "широковещательные" запросы?
← →
Сергей М. © (2008-03-11 14:13) [18]Потому что
ShowMessage(GStack.ResolveHost(idudpclient1.Host));
← →
Михаил (Питер) (2008-03-17 17:50) [19]Блин, в натуре так и есть ) Спасибо большое
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2009.08.16;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.006 c