Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > сокеты


Автор: Akella 11.9.2003, 09:24
как известно, при посылке пакетов в сеть, концентратор (не коммутатор) посылает эти пакеты на все порты, а уж станция (комп) принимает эти пакеты если пакеты принадлежат для этой станции. Концентратор на читает заголовки пакетов и поэтому рассылает пакеты на все санции.
Внимание, вопрос:
- как получать эти пакеты даже если они не предназначены для этой станции, или это не на уровне программы, а на уровне Windows и, естевственно операционка не даст получить эти пакеты.

Автор: Baa 11.9.2003, 14:05
Еще как даст... поищи, такая тема уже была на форуме... сниффер Dayana писала...

Автор: Akella 12.9.2003, 09:10
Я так понимаю, что если поставлю такие свойствах в TServerSocket, то смогу получать все пакеты?
Я пока не пробовал, но обязятельно попробую, только протокол TCP/IP, а обязательно указывать

Код

WSocket1.Addr := '0.0.0.0';
WSocket1.Port := '5003';
WSocket1.Proto := 'udp';
WSocket1.Connect;
Sleep(3000);
for i := 1 to 3 do
begin
//    WSocket1.Receive(@RcvMsg, 8024);
  WSocket1.ReceiveFrom(@RcvMsg, 8024, AddrSour, LengSourc);
end


или этот код будет лучше?

Код
var
 RcvPack : array [0..8024] of char;
 AddrSour : TSockAddr;
 i : integer;
 PackLen : integer;
 vWSAData : TWSAData;
 S : TSocket;
 SockAddr : TSockAddrIn;
 HostName : array[0..128] of char;
 pLocHost : PHostEnt;
 Flag : u_long;

begin
 FillChar(RcvPack, 8024, #0);
 GetHostName(HostName, 129);
 pLocHost := GetHostByName(HostName);
 WSAStartUp(MakeWord(2,2), vWSAData);
 S := Socket(AF_INET, SOCK_RAW, IPPROTO_IP);
 SockAddr.sin_family := AF_INET;
 SockAddr.sin_port := htons(5003);
 SockAddr.sin_addr.S_addr := PInAddr(pLocHost^.h_addr_list)^.S_addr;
 Bind(S, SockAddr, SizeOf(SockAddr));
 Flag := 1;
 ioctlsocket(S, SIO_RCVALL, Flag);
 for i := 1 to 10 do
   PackLen := recv(S, RcvPack, 8024, 0);
 CloseSocket(S);

Автор: Baa 12.9.2003, 09:48
Второй предпочтительней... код не проверял, но свиду похоже на правду.

Автор: Akella 12.9.2003, 14:02
для первого примера:
что есть WSocket1, я знаю TServerSocket & TClientSocket и моя программа пстроена так: на форме лежат оба TServerSocket & TClientSocket, т.е. прога является и сервером и клиентом, в принцыпе программа простенькая, поддержка запуска внешних программ для подшучивания над моими бухгалтерами - есть программка "Rain" (могу скинуть) - при ее запуске экран "течет", как будто дождь пошел, что творится с бухгалтерами, смех да и только. Немного отвлекся.
Я так понимаю WSocket1 - это TWinSocket, а как его использовать? Какие отличия от TServerSocket & TClientSocket, оп... помоему TServerSocket & TClientSocket это наследники от TWinSocket.

для второго примера:
в какое событе этот код вставить?

Автор: Baa 12.9.2003, 15:11
В нажатие на кнопку, токо он при "Simple Cut&Paste"'е работать не будет smile.gif

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)