ICQ - форум. Всё про ICQ.  

Вернуться   ICQ - форум. Всё про ICQ. > Мастерская > Программирование

Программирование C / C++ / Visual C++ / Delphi / Visual Basic / ASM / Windows / Pascal

 
 
Опции темы Оценить тему
Старый 20.06.2005, 20:55   #1
Участник
 
Регистрация: 06.11.2004
Сообщений: 90

Репутация: 52
Сканирование портов!

Как в delphi организовать сканирование подсети на открытый порт. Я делаю так::::::::
============================== ==========
procedure TForm1.FormCreate(Sender: TObject);
var
incet:integer;
begin
incet:=0;

while incet<244 do
begin
ClientSocket1.Host:='30.40.55. '+inttostr(incet);
ClientSocket1.Active:=true;
inc(incet);
end

procedure TForm1.ClientSocket1Connect(Se nder: TObject;
Socket: TCustomWinSocket);
begin
ClientSocket1.Socket.SendText( 'Порт найден');
ClientSocket1.Active:=false;
end;
============================== =================
Но нихрена не прет.. но если в этой строчке while incet<244 do вместо 244 поставить число в диапазоне от 5 до 30 до нормально.. Кто знает , вчем причина!
__________________
Кто сколько и на сколько... и кто против кого... финал один...
Stinger вне форума  
Старый 20.06.2005, 21:34   #2
Участник
 
Аватар для gemaglabin
 
Регистрация: 07.02.2005
Сообщений: 632

ICQ: 4888488

Репутация: 55
По умолчанию

ошибка вознакает при начале работы сканера или уже поле например нескольки просканированных?
__________________
cup.[SU]
gemaglabin вне форума  
Старый 20.06.2005, 23:02   #3
Участник
 
Регистрация: 06.11.2004
Сообщений: 90

Репутация: 52
По умолчанию

если выставляю в while incet<244 do любое чило в диапазоне 5-30 вместо 244 то сервер получает сообщение что порт открыт.. А если ставлю 244 то сервер нихера не получает.. просто весь диапазон сканируеться и все.. gemaglabin подскажи можь еще как можно просканит подсеть на отккрытый порт.. или еще кто знает!
__________________
Кто сколько и на сколько... и кто против кого... финал один...
Stinger вне форума  
Старый 21.06.2005, 07:49   #4
Участник
 
Аватар для arriah
 
Регистрация: 09.01.2005
Сообщений: 176

Репутация: 2
По умолчанию

Цитата:
Сообщение от Stinger
while incet<244 do begin ClientSocket1.Host:='30.40.55. '+inttostr(incet); ClientSocket1.Active:=true; inc(incet); end
Хм...
А ты какие порты-то пытаешься сканить?
Не пробовал указывать, например, ClientSocket1.Port := Номер_порта (integer)
__________________
115788290
Завидую крокодилам! Потому что они даже ходят лежа!
arriah вне форума  
Старый 21.06.2005, 09:09   #5
Участник
 
Аватар для $vi$t
 
Регистрация: 12.11.2004
Сообщений: 696

Репутация: 650
По умолчанию

Для просвещения.
Вложения
Тип файла: txt список портов.txt (44.1 Кб, 1761 просмотров)
__________________
Сдаётся в аренду
[ депутатам и кандидатам солидная скидка ]
$vi$t вне форума  
Старый 21.06.2005, 09:47   #6
Участник
 
Регистрация: 06.11.2004
Сообщений: 90

Репутация: 52
По умолчанию

Мое сканирование происходит должно происходить так.
На своей тачке запускаю Клиента. После.
Запускаем уже прогу на удаленной тачке,на форме которой
клиент и сервер.Сервак открывает порт например 7777. А клиент сканирует
всю подсеть на открытый порт и если такой существует,
то соединяеться и отсылает сообщене уже ко мне на тачку на мой сервер
ClientSocket1.Sock.SendText('П орт открыт').Вот и все..
Только нихрена не получаеться..

Какие еще варианты есть????
__________________
Кто сколько и на сколько... и кто против кого... финал один...

Последний раз редактировалось Stinger; 21.06.2005 в 12:54.
Stinger вне форума  
Старый 21.06.2005, 18:33   #7
Участник
 
Регистрация: 06.11.2004
Сообщений: 90

Репутация: 52
По умолчанию

Вот нашел исходник сканирует диапазон IP на открытые порты.
Как сделать так чтобы при окончании сканирования не вылетало

сообщение
Connection Timeout

И при нажатии кнопки "Остановит" во время сканирование

сообщение
Connection Failed
Надо както эти сообщения нейтрализовать!
Вложения
Тип файла: rar IPScaner.rar (18.1 Кб, 160 просмотров)
__________________
Кто сколько и на сколько... и кто против кого... финал один...

Последний раз редактировалось Stinger; 22.06.2005 в 00:51.
Stinger вне форума  
Старый 25.06.2005, 20:09   #8
Участник
 
Аватар для G_Mitrich
 
Регистрация: 25.06.2005
Сообщений: 9

ICQ: 320196997

Репутация: 1
По умолчанию

Используй компонент TCPClent (uses Sockets, вкладка Internet)
там есть функция Connect, так короче и правильнее будет.

uses ... Sockets;
...
type
TForm1 = class(TForm)
TcpClient1: TTcpClient;
...
procedure TForm1.FormCreate(Sender: TObject);
var
incet:integer;
begin
incet:=0;
TCPClient1.RemotePort := '777';
while incet<244 do
begin
TCPClient1.RemoteHost:='30.40. 55.'+inttostr(incet);
if TCPClient1.Connect then
begin
TCPClient1.Disconnect;
ShowMessage('Найден хост ' + TcpClient1.RemoteHost);
end;
inc(incet);
end;
end;

Последний раз редактировалось G_Mitrich; 27.06.2005 в 06:39.
G_Mitrich вне форума  
Старый 26.06.2005, 17:15   #9
Участник
 
Регистрация: 06.11.2004
Сообщений: 90

Репутация: 52
По умолчанию

У меня нет компонента TTCPClient в моей Delphi.
Версия Delphi 6. По поиску искал компонент тоже не нашел.. можь у кого есть?
__________________
Кто сколько и на сколько... и кто против кого... финал один...

Последний раз редактировалось gemaglabin; 26.06.2005 в 18:36.
Stinger вне форума  
Старый 26.06.2005, 18:30   #10
Участник
 
Аватар для G_Mitrich
 
Регистрация: 25.06.2005
Сообщений: 9

ICQ: 320196997

Репутация: 1
По умолчанию

Он в делфи 7. На, установи модуль Sockets.

Извлеки модуль, потом в дельфи нажми Component=>Install Component
В поле Unit File Name укажи путь к файлу Sockets.pas. Нажми кнопку ОК.
Потом закрой .dpk проект сохранив изменения, на вкладке Internet должны появиться 3 новых компонента: TCPServer, TCPClient, UDPSocket.
(Это чтобы не было непоняток)

Последний раз редактировалось G_Mitrich; 27.06.2005 в 08:26.
G_Mitrich вне форума  
Старый 02.07.2005, 17:21   #11
Участник
 
Регистрация: 06.11.2004
Сообщений: 90

Репутация: 52
По умолчанию

Не могу установить этот компонент..
Все делаю правильно уверен.
Вылетает ошибка. >>>>>>
Требует inet60.
Сохраняю dp проект. в файле dpk добавляю inet60
потом вроде установил но нихера нигде этот компонент не появился ни в какой закладке.
Че за херь не пойму ???
__________________
Кто сколько и на сколько... и кто против кого... финал один...

Последний раз редактировалось Stinger; 02.07.2005 в 17:32.
Stinger вне форума  
Старый 02.07.2005, 19:52   #12
Участник
 
Аватар для G_Mitrich
 
Регистрация: 25.06.2005
Сообщений: 9

ICQ: 320196997

Репутация: 1
По умолчанию

Ладно, фиг с ним, с етим ТСПКлиентом, Делай на КлиентCокете, только немного по-другому:

procedure TForm1.FormCreate(Sender: TObject);
var
incet:integer;
begin

incet:=0;
ClientSocket1.ClientType := ctBlocking;
while incet<244 do
begin
try
ClientSocket1.Host:='30.40.55. '+inttostr(incet);
ClientSocket1.Active:=true;
if ClientSocket1.Active then
begin
ClientSocket1.Socket.SendText( 'Ïîðò íàéäåí');
ClientSocket1.Active:=false;
end;
except
end;
inc(incet);
end;
end;

При не удачном конекте отладчик будет бухтеть, так что прогу запускай не из-под дебугера, работать усё будет.

Не работало у тя потому, что ты использовал асинхронный режим сокета, он ещё не сделал попытки приконектиться к одному ип, ты ужо меняешь на другой и делаешь реконект, с блокирующим режимом всё должно работать (Только компилятор орать истошно будет :)).

P.S. Компоненты могли появиться на панели Samples

Последний раз редактировалось G_Mitrich; 02.07.2005 в 20:21.
G_Mitrich вне форума  
Старый 05.07.2005, 01:30   #13
Участник
 
Регистрация: 06.11.2004
Сообщений: 90

Репутация: 52
По умолчанию

Не хреново паше с ClientSocket1.ClientType := ctBlocking;
Прога виснет и медленно сканит .. вооще жопа..
А если через ClientSocket1.ClientType := ctNonBlocking;
Не виснет работает все нормально но сканит медленно.
Народ подскажите исходник быстро-работающего сканера.
__________________
Кто сколько и на сколько... и кто против кого... финал один...
Stinger вне форума  
Старый 05.07.2005, 14:03   #14
Участник
 
Регистрация: 15.11.2004
Сообщений: 72

Репутация: 1
По умолчанию

Что значит "быстрого".Для тог, чтобы законектится на порт, нужно время.Его ты по-любому не уберешь.Можно конечно уменьшить время ожидания отклика сканируемого порта, но это черевато (при плохом канале или конекте можно просто проскочить).Удинственный выход разбить весь сканируемый диапазон на несколько частей и организовать N-ное число потоков.Тогда все , будет происходить в N раз быстрее.Ну и уменьшить время ожидания отклика до разумных пределов.
__________________
...появились мы на свет, Боже, вот тебе, принимай какие есть, делай выводы...
Ник вне форума  
Старый 06.07.2005, 01:24   #15
Участник
 
Аватар для gemaglabin
 
Регистрация: 07.02.2005
Сообщений: 632

ICQ: 4888488

Репутация: 55
По умолчанию

если руки не кривые то посмотри этот пример сканирования айпи на диапазон портов выполненный на winsock.Его легко переделать
работает достаточно быстро,код документирован
Вложения
Тип файла: txt код.txt (7.6 Кб, 173 просмотров)
__________________
cup.[SU]
gemaglabin вне форума  
Старый 06.07.2005, 11:50   #16
Участник
 
Регистрация: 06.11.2004
Сообщений: 90

Репутация: 52
По умолчанию

gemaglabin
Выводит ошибку типа неопознанный или неописанный объект
hEvent := WSACreateEvent();
Мне кажеться дело в том что при подключении winsock2
у меня тоже вылезла ошибка у меня просто такого модуля нет
(Delphi 6 а у тебя наверно 7 или выше) и пришлось подключить
просто winsock. Где достать winsock2 или если у тебя есть приаттачь!
__________________
Кто сколько и на сколько... и кто против кого... финал один...
Stinger вне форума  
Старый 06.07.2005, 14:52   #17
Участник
 
Аватар для gemaglabin
 
Регистрация: 07.02.2005
Сообщений: 632

ICQ: 4888488

Репутация: 55
По умолчанию

вообщето можно было и на обычном 1.1 винсоке
Вложения
Тип файла: zip Scaner.zip (22.0 Кб, 134 просмотров)
__________________
cup.[SU]
gemaglabin вне форума  
Старый 06.07.2005, 21:33   #18
Участник
 
Аватар для G_Mitrich
 
Регистрация: 25.06.2005
Сообщений: 9

ICQ: 320196997

Репутация: 1
По умолчанию

Цитата:
Сообщение от gemaglabin
если руки не кривые то посмотри этот пример сканирования айпи на диапазон портов выполненный на winsock.Его легко переделать
работает достаточно быстро,код документирован
Этот код будет работать не быстрее, чем тот код что предложил я. На винсокете не быстрее получается. Он наверное через мопед сканит... Тут без таймаута и потоков ничё не получится...
G_Mitrich вне форума  
Старый 06.07.2005, 21:42   #19
Участник
 
Регистрация: 06.11.2004
Сообщений: 90

Репутация: 52
По умолчанию

gemaglabin как я и говорил этот winsock2 ошибку исправил.. потом код подправлю, чтобы можно было IP диапазон сканить.. тода скорость скажу.. нормальная или херовая.
G_Mitrich ты прав через мопед сканю.
__________________
Кто сколько и на сколько... и кто против кого... финал один...
Stinger вне форума  
Старый 02.08.2005, 19:14   #20
Участник
 
Аватар для G_Mitrich
 
Регистрация: 25.06.2005
Сообщений: 9

ICQ: 320196997

Репутация: 1
По умолчанию

Вот накидал пример с потоками, работает довольно шустро...
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Winsock, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
a : array[0 .. 255] of Byte;
implementation
 
{$R *.dfm}
procedure RunThread(p : Pointer);
const
mask = '213.189.243.';
port = 80;
var
S:TSocket;
A:TSockAddr;
IP : String;
Buf : String;
begin
try
Buf := 'Port is opened!';
IP := Mask + IntToStr(Byte(p^));
A.sin_family := AF_INET;
A.sin_addr.S_addr := inet_addr(pchar(IP));
A.sin_port := htons(port);
S := socket(AF_INET, SOCK_STREAM, 0);
if S=INVALID_SOCKET then
Exit;
if connect(S, A, sizeof(A)) = 0 then
begin
Send(S, Buf[1], Length(Buf), 0);
Form1.Memo1.Lines.Add(IP);
end;
CloseSocket(S);
except
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
I : Byte;
T : DWord;
WSA : WSAData;
begin
WSAStartUp($101, WSA);
Memo1.Lines.Clear;
for I := 0 to 255 do
begin
a[I] := I;
BeginThread(nil, 1024, @RunThread, @a[I], 0, T);
end;
end;
end.
Вложения
Тип файла: zip Projects.zip (6.1 Кб, 144 просмотров)

Последний раз редактировалось gemaglabin; 10.08.2005 в 18:27.
G_Mitrich вне форума  
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.

Быстрый переход


Часовой пояс GMT +3, время: 00:41.


Перевод: zCarot
Форум Асечников © Asechka.RU

Новости Сочи