在线端口扫描码工具_手机端口扫描源码

hacker|
134

NMAP为什么扫描不到端口

NMAP是知名的 *** 端口扫描工具。但很多新人发现,使用NMAP经常扫描不出来任何端口,尤其是手机之类。这实际存在一个理解上的误区。扫描端口是为了发现主机/设备上存在的对外开放的端口,以便后期利用。为了探测端口,扫描工具会向目标发送数据包,然后根据响应包来判断端口的开启情况。如果目标不进行响应,扫描工具也就无法探测端口情况。

普通个人电脑和手机在进行 *** 数据传输的时候,会开启端口。但这时,端口处于占用状态。一旦数据发送或者接受完成,端口就自动关闭。在这个时间段内,即使扫描工具刚好向这个端口发送数据包,也不会收到响应包。只有Web、文件共享这类服务才会长期开启端口,启用监听状态后,才会对发送到该端口的包进行响应。而普通电脑和手机很少开启这类服务,所以导致扫描不出端口的情况。

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.Count200 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 Sockhd0 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 。之一步捕捉到异常就是有主机但被扫描的特定端口不存在

hp打印机手机无法扫描

hp打印机手机无法扫描:

1、可以在打印机就绪时,同时按住打印机面板上的无线键和信息键,一秒后松手。

2、然后在打印出的配置页上确认打印机的wifidirect名称和wifidirect密码。

3、手机端口操作如下:安卓手机需要下载hp *** art及hp打印服务插件,苹果手机只需下载hp *** art。手机端,设置-无线-连接打印机wifidirect-输入密码,即可将手机与打印机连接。

4、打开hp *** art测试即可。

0条大神的评论

发表评论