通过侦听端口在LAN上发现MySQL服务器(Inno设置)

通过侦听端口在LAN上发现MySQL服务器(Inno设置),mysql,tcp,inno-setup,tcplistener,pascalscript,Mysql,Tcp,Inno Setup,Tcplistener,Pascalscript,我需要搜索一个带有监听端口的IP地址,以便在局域网上查找其他PC,尝试发现MySQL服务器,并获得具有该端口监听的IP的结果 类似于此代码的内容,用于测试套接字,但在Inno设置中工作: 普芬格计划; 使用套接字,错误; 变量 地址:TInetSockAddr; S:朗吉特; 罪恶,灵魂:文本; 行:字符串; 开始 地址sin_族:=AF_INET; {网络顺序中的端口79} 地址SINU端口:=79第8列; {localhost:127.0.0.1网络顺序} 地址sin_地址s_地址:=1第2

我需要搜索一个带有监听端口的IP地址,以便在局域网上查找其他PC,尝试发现MySQL服务器,并获得具有该端口监听的IP的结果

类似于此代码的内容,用于测试套接字,但在Inno设置中工作:

普芬格计划; 使用套接字,错误; 变量 地址:TInetSockAddr; S:朗吉特; 罪恶,灵魂:文本; 行:字符串; 开始 地址sin_族:=AF_INET; {网络顺序中的端口79} 地址SINU端口:=79第8列; {localhost:127.0.0.1网络顺序} 地址sin_地址s_地址:=1第24或127页; S:=fpSocketAF_INET,SOCK_STREAM,0; 如果不连接S、ADDR、SIN、SOUT,则 开始 Writeln“无法连接到本地主机”; 写入“套接字错误:”,strerrorSocketError; halt1; 终止 重写sout; 复位素; writeln sout,paramstr1; 平流; 而不是在做什么 开始 readln Sin,line; 写线; 终止 第二组,2; 亲近罪恶; 关闭sout; 终止
我已经尝试过Java代码的其他方法。但当我需要解压JRE以运行JavaJAR时,安装程序启动缓慢。我试图包装我的Java代码,但不知道在哪里/如何找到类似于Java的Pascal函数。

要检查服务器是否正在侦听端口,可以使用:

类型 托克特州= sckClosed、sckOpen、SCKListing、sckConnectionPending、sckResolvingHost、, SCKHOSTRE已解决、SCK连接、SCK连接、SCKCLOSS、sckError; 类型 TMsg=记录 hwnd:hwnd; 信息:UINT; wParam:Longint; lParam:长型; 时间:德沃德,; pt:TPoint; 终止 常数 PM_REMOVE=1; 函数peek messagevar lpMsg:TMsg;hWnd:hWnd;wMsgFilterMin,wMsgFilterMax, wRemoveMsg:UINT:BOOL;外部的PeekMessageA@user32.dllstdcall'; 函数TranslateMessageconst lpMsg:TMsg:BOOL; 外部的TranslateMessage@user32.dllstdcall'; 函数DispatchMessageconst lpMsg:TMsg:Longint; 外部的DispatchMessageA@user32.dllstdcall'; 过程消息; 变量 Msg:TMsg; 开始 而PeekMessageMsg,0,0,PM_删除do 开始 翻译信息; DispatchMessageMsg; 终止 终止 函数CheckPortHost:string;端口:整数:布尔; 变量 插座:变型; 开始 套接字:=CreateOleObject'MSWinsock.Winsock'; Socket.RemoteHost:=主机; Socket.RemotePort:=端口; 插座。连接; {Winsock需要消息泵送} 而不是套接字。状态在[sckConnected,sckError]do中 开始 AppProcessMessage; 终止 结果:=Socket.State=sckConnected; 如果结果是这样的话 开始 日志格式“端口%d(位于%s上)已打开”,[端口,主机]; 终止 其他的 开始 日志格式“端口%d(位于%s上)未打开”,[端口,主机]; 终止 插座。关闭; 终止 请注意,Winsock控件需要消息队列泵送。因此,您可能需要在运行检查之前禁用向导,以防止用户弄乱表单


Credits:AppProcessMessage来自

我检查打开端口的目标是Nmap程序

探测TCP端口3306上地址192.168.200.133的示例命令如下:

nmap -sT -sV -Pn -n -p 3306 192.168.200.133
您还可以通过提供CIDR范围而不是IP来扫描整个子网。例如,要扫描192.168.200.1-192.168.200.254上的MySQL实例TCP端口3306,可以执行以下操作:

nmap -sT -sV -Pn -n -p 3306 192.168.200.0/24
^^这些例子直接取自


Nmap在Unix/Linux上非常常用,但在2000年第一次被移植到Windows,目前Win7或更高版本(包括Server 2008)支持。请参见

因此,我曾尝试针对称为外部库的非托管代码块实现它,但什么也没有发生。此时会显示进度页,但进度条不会移动。AppProcessMessage如何读取它正在读取的内容并对进度条进行更改?@Razique我不理解您的评论。您的非托管代码块或进度条与检查端口的问题有什么关系?我的回答不保证任何移动进度条。马丁,是的,我重读了我的问题,不太清楚,很抱歉。我将发布一个新问题。