Profesjonalny skaner portów

0

Dzień dobry chciałem się dowiedzieć jak działa taki
właśnie profesjonalny skaner portów ?

Chodzi mi o to że napisałem własny (WinSock)
i średnio zeskanowanie 20 portów trwa 15 sek.
a pierwszy lepszy z sieci robi to w 2 sekundy
i jestem ciekaw jak to działa ? dlaczego taka
różnica w czasie ?

0

Może ma to coś wspólnego z wielowątkowością, albo coś tędy... :-P

[dopisane]

MCkawa: własnie o to mi chodziło. Miałem kiedys taki skaner (nie pamiętam nazwy), który wyswietlał ilosc stworzonych wątków.
Tzn przynajmniej tak pisał, a czy tak to robił - nie mam pojęcia.

0

Może masz tak zrobione że po wysłaniu pakietu na port czekasz na jego odebranie i dopiero sprawdzasz następny, a "normalne" skanery wysyłają pakiety na kolejne porty nie czekając na ich odebranie...
Ale nie wiem - to tylko moja teoria...

0

thx, udało się [hurra]

trochę co prawda nie wiem jak przesłać zmienną do wątku
więc każdy wątek bierze sobie numer portu ze zmiennej globalnej
i podbija ją o jeden, ale nie to jest najważniejsze ale efekt, robi
100 portów na 2 sekundy i jak na razie to się zastanawiam czy
nie ma jakichś ograniczeń co do ilości tworzonych wątków, no bo
65536 tak na raz to może by było szkodliwe dla kompa [???]

0

Teoretycznie jeden program powinien otwierać nie więcej niż 16 :) ale jeśli każdy wątek robi takie prawie nic, to nie musisz się przejmować.

0

Teoretycznie jeden program powinien otwierać nie więcej niż 16 :) ale jeśli każdy wątek robi takie prawie nic, to nie musisz się przejmować.

hmmm... 16 ? średnio sprawdzenie jednego portu trwa mniej
niż sekundę, to może dam w pętli sleep(50) i nie powinno wyjść
więcej niż 16 na raz.

Mam jeszcze jedno pytanie:
Skaner portów który mam podaje mi nazwy usług np.:

7 echo
13 daytime
17 qotd
19 chargen

Czy takie nazwy można jakoś pobrać
czy trzeba mieć je gdzieś po prostu spisane
np w pliku ?

[dopisane]

a jeżeli trzeba mieć spisane to skąd taką listę wziąć ?

0

ŻADNEGO sleep! To tylko spowolni wszystko nie odciążając w ogóle procesora!

0

a jeżeli trzeba mieć spisane to skąd taką listę wziąć ?

W ostatnim hackingu jest plakat z portami a tak ogólnie to chyba masz na 4p

0

ŻADNEGO sleep! To tylko spowolni wszystko nie odciążając w ogóle procesora!

a mogę użyć Sleep() przy podtrzymywaniu programu przy życiu ?

chodzi mi o to że jak odpalę wszystkie wątki to program kończy
działanie no i trzymam go po przez

while warunek do Sleep(10);

nie wiem czy tak może być ?

i mam jeszcze pytanie drugie:

czy jak skończy działanie procedura wątkowa to wątku już nie ma,
czy trzeba go jakoś samemu usunąć z pamięci ?

0

Może być nawet tak:

while warunek do;

Głupie, ale skuteczne i dokładniejsze.

0

Może być nawet tak:

while warunek do;

Głupie, ale skuteczne i dokładniejsze.

a czy to nie będzie bardziej obiążające, no bo
bez sleepa to chyba ta pętla się o wiele więcej razy wykona ?

0

Nie obciąży, bo to jest coś takiego (asm):

lpl:
cmp arg1,arg2
je lpl

A sleep, jak się domyślam, tworzy własną pętlę, więc wychodzi pętl w pętli co bardziej obciąża (w szczególności, że za każdym wykonaniem z zegara systemowego jest pobierany aktualny czas).

0

czy jak skończy działanie procedura wątkowa to wątku już nie ma,
czy trzeba go jakoś samemu usunąć z pamięci ?

Zależy to od tego czy ustawisz parametr wštku FreeOnTerminate na True, jeli tak to wštek zwolni zajmowanš przez siebie pamięć po zamknięciu, jeli ustawisz na False to nie zwolni tej pamięci (musisz to zrobić ręcznie).
Wystarczy użyć takiego kodu:

procedure TWatek.Execute;
begin
FreeOnTerminate := True;
{pozostał częć kodu wštku}
end;

:)

1 użytkowników online, w tym zalogowanych: 0, gości: 1