Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.224.63.87] |
|
Сообщ.
#1
,
|
|
|
Народ, тут у меня появилась необходимость определять события, когда кто-нить обращается к определенному порту моего компа.
Так вот, как енто сделать? Можна конечно просто взять TServerSocket и через его OnAccept определять момент активности, но при этом если какя-то прога уже работает с этим портом - то этот самый TServerSocket ругается при своей активации, типа "разрешено только одно использование адреса сокета" Как с этим бороться, а еще лучше может есть другие средства по "прослушиванию" портов. Будет интересно узнать способы реализации сабжа. |
Сообщ.
#2
,
|
|
|
Имхо, только на более низком уровне.
|
Сообщ.
#3
,
|
|
|
ZEE
По-моему в FAQ по СИ я уже такое видел. Там сокет вводился в прослушивающийся режим и выводил инфу в файл, этакий снифер. |
Сообщ.
#4
,
|
|||
|
Да нашел там образцы снифферов - один вроде как более-менее понятный - от него начал отталкиаться в итоге получилась такая штука (код чуть ниже), но не могу понять что не так - в общем посмотрите и посоветуйте что исправить или заменить...
конешна по-хорошему надо было бы не на таймер вешать, а события обрабатывать, но я с ними вобще что-т не могу разобраться... и на счет sa.sin_port:=htons(0); - как после bind() прицепить сокету нужный порт или как сразу указать нужный, чтоб bind() срабатывал нормально?... зы: как вы наверно заметили все сообщения и (возможные) перехваченные пакеты заносятся в Memo1 (это так для информации) |
Сообщ.
#5
,
|
|||||
|
Поскольку в recv можно "провалиться" на долго (больше чем величена таймера Timer1), надо защитится от повторного входа. Да и если ошибка на сокете, то наверное вызывать recv не стоит. Например так:
Но в принципе, надо-бы еще определять сколько данных уже имеется в буфере WinSock и лиш только это кол-во запрашивать в recv. Иначе, провиснешь в нем до получения SizeOf(Buffer) байтов - а это может быть даже навсегда . |
Сообщ.
#6
,
|
|
|
>Петрович - да совет хороший (разв што не Timer1.Active, а Timer1.Enabled)
но все-одно остается вопрос что делать с sa.sin_port:=htons(0); - нужный порт туда ставить или как-то потом его куда-нить присобачивать (и как) ??? пытаюсь делать то же что и в ScktComp.pas но ни х не получаеца (всмысле там надо конкретно порт указывать сразу - а как я говорил при этом бинд ругается и как я понял без этого бинда низя) вобщем F1 plz |