游戏121-最新游戏动态,游戏攻略宝典

手机阅读

m.youxi121.com

当前位置:首页 > 游戏新闻 > 正文

Asynchronous XXX好玩吗 Asynchronous XXX玩法简介

2023-03-18 08:30:02 来源 :互联网 编辑:游戏121

Asynchronous socket error 10061

服务器错误,
端口扫描的问题
在写端口扫描时 ,如果与某主机特定端口无法通信 ,

就此主机而言 ,我想应该有以下两种情况 :

1 。此地址上无任何主机存在

2 。有主机但被扫描的特定端口不存在 ( 也可能是被 firewall 过滤了 )
如何得知某端口一打开
给你来个简单的吧!

procedure TForm1.Timer1Timer(Sender: TObject);

var

I : integer;

begin

Memo1.Clear;

for I := 0 to 1000 do begin

ServerSocket1.Close;

ServerSocket1.Port := I;

try

ServerSocket1.Open;

except

Memo1.Lines.Add(IntToStr(I) + ' 端口被打开 !');

end;

end;

end;

对不起 ,我指的是别人机器上的 PORT

你是说 PORT 只能被一个程序打开么 ?

可是 ,我用 OICQ 时在打开 4000 没问题呀

我把上面的程序改了一下 ,也可以用的。你就去试图连接对方 ,如果通了 ,说明此端口被打

开。

procedure TForm1.ClientSocket1Connect(Sender: TObject;

Socket: TCustomWinSocket);

begin

Memo1.Lines.Add(' 端口 '+IntToStr(Socket.RemotePort)+' 被打开! ');

end;

procedure TForm1.Timer1Timer(Sender: TObject);

begin

ClientSocket1.Close;

ClientSocket1.Port := PortID;

try

ClientSocket1.Open;

except

end;

Inc(PortID);

end;

procedure TForm1.FormCreate(Sender: TObject);

begin

PortID := 1;

end;

procedure TForm1.ClientSocket1Error(Sender: TObject;

Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;

var ErrorCode: Integer);

begin

try

ClientSocket1.Close;

except

end;

Memo2.Lines.add(IntToStr(Socket.remotePort));

end;

吕雪松你的方法我试过了可是抱错 :asynchronous socket error 10061

--------------------------------------------------------------------------------

来自 :xueminliu 时间 :01-3-3 17:26:47 ID:464312

要区分 tcp 和 udp

oicq 用 udp 协议 ,connect 没有用 ,但是 tcp 可以这样

另外 ,如果你写扫描程序可千万不要这样 ,应该使用别的链接方法 ,否则你的踪迹会被别人

发现 .例如使用 sys 扫描或者 fin 扫描 :

我给你异步 socket 的 api 代码 :

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls,WInSock, ExtCtrls;

const WM_SOCKET=WM_USER+1; //socket 消息

type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Panel1: TPanel;

Memo1: TMemo;

procedure FormCreate(Sender: TObject);

procedure FormDestroy(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

Sockhd : integer; //socket 句柄

Serv_Addr : Tsockaddr;// 目标地址

procedure SockEvent(var msg: Tmessage);message WM_SOCKET; // 处理 cocket 消息

procedure DspMsg(msg : string); // 显示信息

{ Private declarations }

public

{ Public declarations }

end;

Form1: TForm1;

implementation

{$R *.DFM}

function lookup_hostname(const hostname:string):longint; // 把域名转化成 IP 地址

var

RemoteHost : PHostEnt; (* no, don't free it! *)

ip_address: longint;

begin

ip_address:=-1;

try

if hostname='' then

begin (* no host given! *)

lookup_hostname:=ip_address;

EXIT;

end

else

begin

ip_address:=Winsock.Inet_Addr(PChar(hostname)); (* try a xxx.xxx.xxx.xx first *)

if ip_address=SOCKET_ERROR then begin

RemoteHost:=Winsock.GetHostByName(PChar(hostname));

if (RemoteHost=NIL) or (RemoteHost^.h_length<=0) then

begin

lookup_hostname:=ip_address;

EXIT; (* host not found *)

end

else

ip_address:=longint(pointer(RemoteHost^.h_addr_list^)^);

end;

end;

except

ip_address:=-1;

end;

lookup_hostname:=ip_address;

end;

procedure TFOrm1.DspMsg(msg: string);

begin

memo1.Lines.Add(msg+'...');

if Memo1.Lines.Count>200 then Memo1.Lines.Delete(0);

end;

procedure TForm1.SockEvent(var msg : tmessage); // 处理 socket 消息

begin

case msg.LParam of

FD_READ: begin // 标识可以读数据 ,当然肯定已经链接上了

dspmsg(' 可以读取数据 ');

//do what you want do

end;

FD_WRITE: begin

dspmsg(' 可以发送数据 ');

//do what you want do

end;

FD_ERROR: begin

dspmsg(' 发生错误 ');

// 如果你是客户端 ,则应该是连接不上 ,即端口没有开

end;

FD_CLOSE: Begin

dspmsg(' 服务器断开连接 ');

// 对方关闭连接

end;

FD_CONNECT: begin

dspmsg(' 连结上服务器 ');

// 表示对方端口开放

end;

FD_ACCEPT: begin

dspmsg(' 接收一个请求 ');

// 这个消息只有服务端可能出现

end;

end;

end;

procedure TForm1.FormCreate(Sender: TObject);

var wsaData:TwsaData;

begin // 启动 winsock 动态链接库

if WSAStartup (makeword(2,2), wsaData)<>0 then begin

messagebox(application.handle,' 无法启动 winsock 动态连接库 !',' 警告 ',MB_OK or MB_APPLMODAL or MB_ICONWARNING);

Application.Terminate;

end;

end;

procedure TForm1.FormDestroy(Sender: TObject);

begin // 关闭 dll

WSACleanup;

end;

procedure TForm1.Button1Click(Sender: TObject);

begin

Sockhd := socket(AF_INET,SOCK_STREAM,0); // 创建 socket 句柄

if Sockhd<0 then begin

messagebox(application.handle,' 无法创建句柄 !',' 警告 ',MB_OK or MB_APPLMODAL or MB_ICONWARNING);

exit;

end;

Serv_addr.sin_addr.s_addr:= lookup_hostname(edit1.Text); // 主机名

Serv_addr.sin_family := PF_INET;

Serv_addr.sin_port := htons(23); //any port you want to connect

if WSAAsyncSelect(Sockhd,Form1.handle,WM_SOCKET,FD_ACCEPT or FD_CONNECT or FD_CLOSE or FD_READ or FD_WRITE)=SOCKET_ERROR

then begin

messagebox(application.handle,' 无法创建句柄 !',' 警告 ',MB_OK or MB_APPLMODAL or MB_ICONWARNING);

exit;

end; // 异步 socket

connect(sockhd,serv_addr,sizeof(serv_addr)); // 连接 ,结果会在前面的处理函数处理

end;

end.

相信应该可以满足你的要求

请问如何编程区分这两种情况

最好详细一点喔 ( 我很笨的 )

如果在此地址上无主机存在 ,则发出的数据包得不到回应 ,应用程序会等待超时才

认为连接失败 ( 被 firewall 过滤时情况一样 ),若有主机但被扫描的特定端口不存在时 ,

该主机会发出目的端口不存在的应答

至于如何编程实现 ,应该可以由错误码来判断 ,在 OnError 事情中判定 ErrorCode 是多

小 ,再分别处理 ,ErrorCode 的详情参见 Help

这么高深的问题才 50 分 ,少了

端口扫描不是这么简单 ,否则大家都做

首先你扫描人家的端口会留下自己的痕迹 ,系统有日志可以察看

因此我们做端口扫描的的时候绝对不会直接连接别人 ,而是通过地层的接口编程

例如在 TCP 三次握手的第三次放弃 ,对方就不会有日志 ,这称为 sys 扫描

给对方端口发断开连接的请求称为 fin 扫描 .

通过这两种扫描方式都可以得知对方的端口是否开 ,而且不会留下痕迹 .

总之端口扫描里面有很多学问 ,不是这里可以说清除的

怎么做呀 ,如你所说的话好象要直接调用 socket api?

我现在首先关心的是我提出的问题 ,如何编程区分这两种情况 :

1 。此地址上无任何主机存在

2 。有主机但被扫描的特定端口不存在 ( 也可能是被 firewall 过滤了 )

还有 ,为什么我把 clientsocket 的 onread 里的 errorcode 设为 0 了 ,

还是常常会出现 delphi 自己的错误消息提示 ,象 10061,10057 什么的 ,

这好象是另外一种 error code,如能把它屏蔽我想就不会出现提示了 .

是吗?如果是 ,该怎么做呢。

最后 : 如果能给我一个多线程的端口扫描源码 ,我再给 100 分 ( 真的很穷啊 )

我找到了 help 里的有关说明 ( 是在索引中 Error TCP Event 里找到的 )

WinSock Error Codes

The following error codes apply to the WinSock ActiveX Controls.

Error Code Error Message

10004 The operation is canceled.

10013 The requested address is a broadcast address, but flag is not set.

10014 Invalid argument.

10022 Socket not bound, invalid address or listen is not invoked prior to accept.

10024 No more file descriptors are available, accept queue is empty.

10035 Socket is non-blocking and the specified operation will block.

10036 A blocking Winsock operation is in progress.

10037 The operation is completed. No blocking operation is in progress.

10038 The descriptor is not a socket.

10039 Destination address is required.

10040 The datagram is too large to fit into the buffer and is truncated.

10041 The specified port is the wrong type for this socket.

10042 Option unknown, or unsupported.

10043 The specified port is not supported.

10044 Socket type not supported in this address family.

10045 Socket is not a type that supports connection oriented service.

10047 Address Family is not supported.

10048 Address in use.

10049 Address is not available from the local machine.

10050 Network subsystem failed.

10051 The network cannot be reached from this host at this time.

10052 Connection has timed out when SO_KEEPALIVE is set.

10053 Connection is aborted due to timeout or other failure.

10054 The connection is reset by remote side.

10055 No buffer space is available.

10056 Socket is already connected.

10057 Socket is not connected.

10058 Socket has been shut down.

10060 The attempt to connect timed out.

10061 Connection is forcefully rejected.

10201 Socket already created for this object.

10202 Socket has not been created for this object.

11001 Authoritative answer: Host not found.

11002 Non-Authoritative answer: Host not found.

11003 Non-recoverable errors.

11004 Valid name, no data record of requested type.

我想只要对它进行有关操作就能完全屏蔽 winsocket 错误消息 ( 至少

能屏蔽很多 onerror 里的 errorcode 参数无法屏蔽的消息 )

我终于找到原因所在了

在打开 Socket 时也要捕获异常

try

ClientSocket.Open;

except

MessageBox(MainForm.Handle,'Error connecting to this address','Connect',MB_ICONEXCLAMATION);

end;

在 OnError 中最后要将 ErrorCode 置为 0

if ErrorEvent=eeConnect then

begin

Socket.Close;

MessageBox(MainForm.Handle,'Error connecting to this address','Connect',MB_ICONEXCLAMATION);

end

else if ErrorEvent=eeSend then

Socket.Close;

ErrorCode:=0;

你可能无做第一步

而这样也可以区分你所说的两种情况

1 。第二步 OnError 就是此地址上无任何主机存在 ,到超时就触发 OnError 事件

2 。第一步捕捉到异常就是有主机但被扫描的特定端口不存在
相关文章
摩天汉堡好玩吗 摩天汉堡玩法简介
汉堡有什么好玩的堡地处德国北部,是德国第二大城市,也是德国最重要的海港和最大的外贸、金融中心。这是座舒适的海滨城市,市内不仅有宏伟的办公建筑、名目繁多的博物馆,还有美丽的阿尔斯特湖,平静的湖面上彩帆点点,天鹅优雅地穿梭在波光粼粼中,悠然自得[详细]
《神龙宝藏》答题系统玩法介绍
盗墓OL答题系统怎么玩题系统玩法攻略详解墓刺秦宝箱争夺战怎么玩箱争夺战玩法详解。今天小编就给玩家们详解游戏中的宝箱争夺战的玩法。接下来就和18183小编木子一起来看看吧。 #13; 动开启时间 色[详细]
使命皇家鹰队好玩吗 使命皇家鹰队玩法简介
皇家使命任务怎么做开地图,可以看到天火号在暴风城的西北部:远处就是传说中的天火号:抵达天火号以后,要做的第一件事就是去找罗杰斯上尉,那么她在哪里呢?注意看右上角小地图,看到图中的那个小白圈了吗?由于这是个对话任务,因此目标人物会在小地图上被[详细]
谁都别想走好玩吗 谁都别想走玩法简介
有什么好玩的小游戏湖悠悠》一款治愈系的武侠题材游戏,没有刀光剑影,也不会飞檐走壁,都是普通人,都是有故事的人。玩法类似于之前的《旅行青蛙》,但是添加了许多中国特有的武侠元素。不肝不氪,非常的佛系,非常的温情。甚至玩过这款游戏,还会勾起玩家淡[详细]
遗忘太初好玩吗 遗忘太初玩法简介
太初封神传好玩吗初封神传玩法简介太初封神传》是一款3D般豪情大气的pvp竞技巅峰玩耍类的手游,游戏中有丰富的多职业的转换,各种潮流冒险的对战体验,丰富的连招炫酷无比,充实可靠的社交体验还有玄仙争霸的多人抢占无所不能。状态:公测类型:角色扮演[详细]
《领主之怒》遗迹集结玩法大解析
魔兽世界未满18岁去不了诺森德,怎么办生意火爆兽世界WLK死亡骑士全面资料ttp://games.sina.com.cn/o/z/wow/2008-09-03/1844294594.shtml转自新浪职业介绍:死亡骑士业简介作为魔兽世界的第[详细]
凤绣江山好玩吗 凤绣江山玩法简介
凤绣江山这个游戏如何获得很多金叶子?开店铺可以获得很多金叶子凤绣江山是一款后宫争宠类型的游戏,玩家们在这个古代的世界中,和其他人一起想尽办法获得青睐,你可以通过每日不同的装扮去吸引皇上的注意力,喜欢后宫游戏的玩家快来下载!凤绣江山游戏亮点1[详细]
九阳御天好玩吗 九阳御天玩法简介
御天的特色玩法仙之路漫漫,有人陪伴才不寂寞,带上你的仙侣来定情仙境吧!这里不仅能得到海量经验,还能获得稀有道具玫瑰花,赠送给你心仪的人哦~击败最后的封印还能在副本内打坐双修,获得更高的灵气和经验值的奖励1、玩家等级达到34级之后可以参加仙缘[详细]
第二银河虫洞怎么玩 虫洞旅行玩法内容攻略
第二银河虫洞怎么玩,进入虫洞就不知道干什么了……洞攻略:在虫洞会受到能量恢复减少的DEBUFF,最高达到95%,因此在虫洞能量是十分宝贵的,能量增益组件能带多少带多少,就像凯斯教官说的,没有能量的舰船就是一口漂浮的棺材:进虫洞直接找W3开头[详细]
《暴走战舰》-天赋系统玩法简介
狂暴之翼天赋系统怎么玩赋觉醒玩法技巧详解赋系统详解:狂暴之翼的天赋系统分为4个天赋树:冒险,克疾风者,克狂战士,克魔法师。冒险是针对PVE的,包括增加对怪物伤害和增加副本收益。后面三个各自针对所对应的职业,例如加强对疾风者的伤害,减少来自疾[详细]
量子特攻经典模式是大逃杀吗 经典模式玩法内
作为一名量子特攻代练要有什么要求?要在这个非常火爆的游戏当中做好代练,分一杯羹的话首先就是要有一定的技术水平。其次就是要有相对应的时间。因为代练很多时候都是需要很多时候去肝去连夜打的,所以时间也是必不可少的,最后就是一个好的代练平台了。往往[详细]
第二银河战争怎么玩 战争玩法规则完整教学
第二银河新手攻略大全手怎么玩二银河还是比较容易上手的。你可以去B站看教学视频,有个《简单玩第二银河》的系列,基本上把游戏的基本操作和目前的所有玩法都涉猎到了。际战争新手怎么玩手入门玩法攻略、这游戏和其他游戏不一样,每天完成任务,积极参加活动[详细]
第二银河怎么管理舰队 舰队管理玩法入门教学
银河战舰舰队怎么培养民舰队培养攻略分享游戏中,舰船共分为五种类型,它们有着各自的优缺点,分别是:护卫舰、驱逐舰、巡洋舰、战列舰、航空母舰同时还有六个等级的稀有度用来区分强度,它们分别是:Ⅰ:见习战舰(白色)Ⅱ:普通战舰(蓝色)Ⅲ:精英战舰([详细]
许愿池、秀玩法 助你成为新版《劲舞时代》大
已经出WIN10了,劲舞什么时候解决劲舞团》起源于一部韩国漫画《Audition》,游戏由T3ntertainment开发,Yedangnline负责其全球发行。《劲舞团》最初于2005年在韩国测试,后来发展到全球范围。劲舞团》是一款免费舞[详细]
《云顶之弈》9.18约德尔法师阵容怎么玩 阵容
云顶之弈约德尔人使用技巧有哪些?英雄联盟的云顶之弈约德尔人组合有很高的几率闪避攻击,3个组合有20%闪避,6个组合有60%闪避。从现在的版本角度来说,约德尔人的阵容虽然冷门,但是相对非常的实用,上分效率也非常高。工具/原料电脑1、约德尔英雄[详细]
异界守护者幻想战记好玩吗 异界守护者幻想战
诛仙界守护者量石精怎么用仙2异界守护者幻灵石有什么技能效果,有诛仙2玩家朋友不知道诛仙2异界守护者幻灵石有什么技能效果。所以问到诛仙2异界守护者幻灵石有什么技能效果这个问题,下面小编来告诉大家诛仙2异界守护者幻灵石有什么技能效果。仙2异界守[详细]
你可能喜欢
游戏攻略版权归原作者享有,如无意之中侵犯了您的版权,请来信告知,本站将应您的要求删除!
CopyRight©2021-2022 www.youxi121.com All Right Reserved 京ICP备4565610号