N
Neffpb
Unregistered / Unconfirmed
GUEST, unregistred user!
本人想搜索一下局域网内(由于是用TCP/IP协议,因此这对Internet也是适合的吧)
的资源,看有没有人开放80端口。本人做了一个程序,在WinNT下使用没有任何问题,
但在Win98下扫描总是失败,不知何解,请高手们不吝赐教,本人将感激不尽。
本人代码简介如下(采用多线程):
【主线程部分】:
var
sk: array [0..99] of MySocket;
addr: Tsockaddr;
lst: TList;
CurScanIP: string;
。。。。。
//线程结束时的处理过程:
procedure TForm1.OnThreadEnd(Sender: TObject);
begin
Index:=lst.IndexOf(Sender); //查找结束了的线程的序号。
lst.Delete(Index);
if CurScanIP=EndIP then //如果扫描结束则退出。
exit;
addr.sin_addr.s_addr :=inet_addr(Pchar(CurScanIP));
addr.sin_port:=htons(80);
sk[Index]:=MySocket.Create(ListBox1, addr, Timeout);
sk[Index].OnTerminate:=OnThreadEnd; //线程结束时要作的处理。
lst.Add(sk[Index]); //保存已使用了的线程名。
end;
//当点击“开始扫描”按钮时:
procedure TForm1.btStartClick(Sender: TObject);
begin
CurScanIP:=StartIP; //CurScanIP为当前要进行扫描的IP地址,初始值为某一起始IP地址。
for i:=0 to 99 do
begin
addr.sin_family :=AF_INET;
addr.sin_addr.s_addr :=inet_addr(Pchar(CurScanIP));
addr.sin_port:=htons(80);
sk:=MySocket.Create(ListBox1, addr, Timeout); //ListBox1 是用于显示扫描结果的,Timeout为超时。
sk.OnTerminate:=OnThreadEnd; //线程结束时要作的处理。
lst.Add(sk); //保存已使用了的线程名。
Inc(IPScaned); //IP地址加一,挑选出下一个IP地址。
end;
end;
【线程部分】:
type
MySocket = class(TThread)
private
{ Private declarations }
Tlst: TListBox;
Taddr: TSockAddr;
TInterval: integer;
protected
procedure Execute; override;
procedure AddItem;
public
constructor create(ListBox: TListBox; addr: TSockAddr; Timeout: integer);
end;
。。。。。
procedure MySocket.AddItem;
begin
Tlst.Items.Add(inet_ntoa(taddr.sin_addr));
end;
constructor MySocket.create(ListBox: TListBox; addr: TSockAddr; Timeout: integer);
begin
inherited create(False);
Tlst:=ListBox;
Taddr:=addr;
TInterval:=Timeout;
FreeOnTerminate:=True;
end;
procedure MySocket.Execute;
var
wsaData: TWSAData;
skt: TSocket;
Re: integer;
begin
Try
if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
exit;
//建立Socket。
skt:=socket(AF_INET,SOCK_STREAM,0);
if skt=INVALID_SOCKET then //创建失败时。
exit;
//建立连接。
Re:=connect(skt,Taddr,sizeof(Taddr));
if Re=0 then //连接成功时,写入消息。
Synchronize(AddItem);
if Terminated then
exit;
finally
closesocket(skt);
WSACleanup;
end;
end;
=================================================================
本人程序的主要问题:
扫描和自己一个网段(如:本人IP为172.133.199.1,则扫描172.133.x.x的
[x为任意地址]IP范围没有错误; 但是扫描如192.168.x.x网址则开始很慢,停止
扫描后又重新一遍扫描数次后,扫描时所有地址一下就扫描过了,没有任何返回结果。
这令我很不解。 我采用的是Win Socket,按理说应该是没问题的呀??
请高手们帮忙解决一下问题:
1、如何使得能在Win98下扫描IP(80端口为例)?
2、是否有方法控制延迟?
请大家不吝赐教,再次感激不尽!
的资源,看有没有人开放80端口。本人做了一个程序,在WinNT下使用没有任何问题,
但在Win98下扫描总是失败,不知何解,请高手们不吝赐教,本人将感激不尽。
本人代码简介如下(采用多线程):
【主线程部分】:
var
sk: array [0..99] of MySocket;
addr: Tsockaddr;
lst: TList;
CurScanIP: string;
。。。。。
//线程结束时的处理过程:
procedure TForm1.OnThreadEnd(Sender: TObject);
begin
Index:=lst.IndexOf(Sender); //查找结束了的线程的序号。
lst.Delete(Index);
if CurScanIP=EndIP then //如果扫描结束则退出。
exit;
addr.sin_addr.s_addr :=inet_addr(Pchar(CurScanIP));
addr.sin_port:=htons(80);
sk[Index]:=MySocket.Create(ListBox1, addr, Timeout);
sk[Index].OnTerminate:=OnThreadEnd; //线程结束时要作的处理。
lst.Add(sk[Index]); //保存已使用了的线程名。
end;
//当点击“开始扫描”按钮时:
procedure TForm1.btStartClick(Sender: TObject);
begin
CurScanIP:=StartIP; //CurScanIP为当前要进行扫描的IP地址,初始值为某一起始IP地址。
for i:=0 to 99 do
begin
addr.sin_family :=AF_INET;
addr.sin_addr.s_addr :=inet_addr(Pchar(CurScanIP));
addr.sin_port:=htons(80);
sk:=MySocket.Create(ListBox1, addr, Timeout); //ListBox1 是用于显示扫描结果的,Timeout为超时。
sk.OnTerminate:=OnThreadEnd; //线程结束时要作的处理。
lst.Add(sk); //保存已使用了的线程名。
Inc(IPScaned); //IP地址加一,挑选出下一个IP地址。
end;
end;
【线程部分】:
type
MySocket = class(TThread)
private
{ Private declarations }
Tlst: TListBox;
Taddr: TSockAddr;
TInterval: integer;
protected
procedure Execute; override;
procedure AddItem;
public
constructor create(ListBox: TListBox; addr: TSockAddr; Timeout: integer);
end;
。。。。。
procedure MySocket.AddItem;
begin
Tlst.Items.Add(inet_ntoa(taddr.sin_addr));
end;
constructor MySocket.create(ListBox: TListBox; addr: TSockAddr; Timeout: integer);
begin
inherited create(False);
Tlst:=ListBox;
Taddr:=addr;
TInterval:=Timeout;
FreeOnTerminate:=True;
end;
procedure MySocket.Execute;
var
wsaData: TWSAData;
skt: TSocket;
Re: integer;
begin
Try
if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
exit;
//建立Socket。
skt:=socket(AF_INET,SOCK_STREAM,0);
if skt=INVALID_SOCKET then //创建失败时。
exit;
//建立连接。
Re:=connect(skt,Taddr,sizeof(Taddr));
if Re=0 then //连接成功时,写入消息。
Synchronize(AddItem);
if Terminated then
exit;
finally
closesocket(skt);
WSACleanup;
end;
end;
=================================================================
本人程序的主要问题:
扫描和自己一个网段(如:本人IP为172.133.199.1,则扫描172.133.x.x的
[x为任意地址]IP范围没有错误; 但是扫描如192.168.x.x网址则开始很慢,停止
扫描后又重新一遍扫描数次后,扫描时所有地址一下就扫描过了,没有任何返回结果。
这令我很不解。 我采用的是Win Socket,按理说应该是没问题的呀??
请高手们帮忙解决一下问题:
1、如何使得能在Win98下扫描IP(80端口为例)?
2、是否有方法控制延迟?
请大家不吝赐教,再次感激不尽!