当前位置: 首页 > 面试题库 >

如何检查客户端的网络/防火墙是否开放端口?

寿伟
2023-03-14
问题内容

最后使用jQuery AJAX(和JSONP)的“超时”属性解决了这个问题。看到我自己的答案!

请查看更新的部分,我也尝试过使用applet。 如果可以使用applet实现提供解决方案,也将毫不犹豫地接受您的答案。

我正在使用基于Java的Web应用程序。我的要求是检查特定端口(例如1935)是否在客户端打开或阻塞。我实现了一个“ jsonp”(为什么使用“
jsonp”?我发现通过AJAX发出的“
http”请求不能用于浏览器“相同来源策略”的corssdomain)对包含特定端口的服务器之一进行AJAX调用。如果服务器返回xhr.status == 200端口,则说明该端口是开放的。这是一个缺点,我无法让执行流程等待(同步),直到调用完成。这是我正在使用的JavaScript函数。

也欢迎任何其他解决方案(必须是客户端的东西,必须与我的应用程序平行,请不要建议使用python / php /其他语言)。 谢谢你的时间。

function checkURL() {

    var url = "http://10.0.5.255:1935/contextname" ;
    var isAccessible = false;

    $.ajax({
        url: url,
        type: "get",
        cache: false,
        dataType: 'jsonp',
        crossDomain : true,
        asynchronous : false,
        jsonpCallback: 'deadCode',
        complete : function(xhr, responseText, thrownError) {
            if(xhr.status == "200") {
                isAccessible = true;
                alert("Request complete, isAccessible==> " + isAccessible); // this alert does not come when port is blocked
            }
        }
    });

    alert("returning isAccessible=> "+ isAccessible); //this alert comes 2 times before and after the AJAX call when port is open
    return isAccessible;

}

function deadCode() {
    alert("Inside Deadcode"); // this does not execute in any cases
}

--------------------------------------------------
-------更新------------------------------------------ ----------------------

我尝试使用Java Applet(由于Y
Martin的建议)。这在appletviewer中工作正常。但是,当我在HTML页面中添加applet时,它会产生易受攻击的结果。从某种意义上讲,当我更改标签或调整浏览器大小时,它很脆弱,它的值portAvailable在打印的消息中被更改。

小程序代码:

import java.applet.Applet;
import java.awt.Graphics;
import java.net.InetSocketAddress;
import java.net.Socket;

public class ConnectionTestApplet extends Applet {
    private static boolean portAvailable;
    public void start() {
        int delay = 1000; // 1 s
        try {
            Socket socket = new Socket();
                /*****This is my tomcat5.5 which running on port 1935*************/
                /***I can view it with url--> http://101.220.25.76:1935/**********/
            socket.connect(new InetSocketAddress("101.220.25.76", 1935), delay);
            portAvailable = socket.isConnected();
            socket.close();
            System.out.println("init() giving--->  " + portAvailable);
        }
        catch (Exception e) {
            portAvailable = false;
            System.out.println("init() giving--->  " + portAvailable);
            System.out.println("Threw error---> " + e.getMessage());
        }

    }
    public void paint(Graphics g) {
        System.out.println("Connection possible---> " + portAvailable);
        String msg = "Connection possible---> " + portAvailable;
        g.drawString(msg, 10, 30);
    }
}

这是我的HTML页面(我将其托管在运行9090端口的另一台Tomcat 6所在的同一台计算机上。我可以使用url
—>查看此页面<http://101.220.25.76:9090/test/>):

<html>
<body>
        <applet code="ConnectionTestApplet" width=300 height=50>
        </applet>
</body>
</html>

以及我如何对1935年港口进行封锁和开放?

我已经为端口1935的入站和出站都创建了防火墙规则。我通过禁用/启用这两个规则来检查端口1935处于打开/阻止状态。

这是我的SSCCE。现在请帮助我:)


问题答案:

知道了!我已经解决了JSONP和jQuery AJAX调用的问题。我发现了timeoutjQuery AJAX
的属性,并且当端口被阻塞或打开时,我的代码可以流畅地执行。这是未来访客的解决方案。感谢所有答复者的贡献。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
        <script type="text/javascript" src="jquery-1.7.2-min.js"></script>
    </head>
    <body>
        <script type"text/javascript">
            var isAccessible = null;
            function checkConnection() {
                var url = "http://101.212.33.60:1935/test/hello.html" ;
                $.ajax({
                    url: url,
                    type: "get",
                    cache: false,
                    dataType: 'jsonp', // it is for supporting crossdomain
                    crossDomain : true,
                    asynchronous : false,
                    jsonpCallback: 'deadCode',
                    timeout : 1500, // set a timeout in milliseconds
                    complete : function(xhr, responseText, thrownError) {
                        if(xhr.status == "200") {
                           isAccessible = true;
                           success(); // yes response came, esecute success()
                        }
                        else {
                           isAccessible = false;
                           failure(); // this will be executed after the request gets timed out due to blockage of ports/connections/IPs
                        }
                    }
               });
            }
            $(document).ready( function() {
                checkConnection(); // here I invoke the checking function
            });
        </script>
    </body>
</html>


 类似资料:
  • 本文向大家介绍Centos7.1防火墙开放端口快速方法,包括了Centos7.1防火墙开放端口快速方法的使用技巧和注意事项,需要的朋友参考一下 例如安装Nagios后,要开放5666端口与服务器连接,命令如下: CentOS 7开放端口: CentOS升级到7之后,发现无法使用iptables控制Linuxs的端口,google之后发现Centos 7使用firewalld代替了原来的iptabl

  • 我已经编写了java客户端服务器套接字连接代码。因为服务器接受客户机连接,然后服务器使用PrintStream发送数据,客户机在readline()中读取数据。在此之后,客户端将在readline中等待服务器。如果存在网络断开,客户端将在readline中保持等待,并且从不从readline退出。是否有一种方法从客户端本身检测断开?或者我是否必须编写新的心跳线程来检查网络断开?

  • 我为Azure存储帐户启用了虚拟网络和防火墙访问限制,但遇到了一个问题,即我无法从Azure Functions(ASE环境)访问存储帐户,尽管ASE公共地址是作为例外添加的。此外,我添加了所有环境的虚拟网络,只是为了确保。是否有任何方法可以检查函数/其他服务试图从哪个地址访问存储帐户?此外,我有一个勾选“允许受信任的Microsoft服务访问此存储帐户”。我不确定“受信任的Microsoft服务

  • springboot开发的jar程序,运行在 windows server 2019 服务器上,前端链接后端 websocket 的地址类似:ws://192.168.1.2:7076/showabe/frontEndWebSocket?category=tv。只有关闭防火墙才能正常通信,如果打开防火墙即使设置放行端口号7076仍然无法通信,要如何做可以打开防火墙的情况下不影响 websocket

  • 那么如何打开端口并使其在重启后存活呢?

  • 本文向大家介绍linux下mysql开启远程访问权限 防火墙开放3306端口,包括了linux下mysql开启远程访问权限 防火墙开放3306端口的使用技巧和注意事项,需要的朋友参考一下 开启mysql的远程访问权限 默认mysql的用户是没有远程访问的权限的,因此当程序跟数据库不在同一台服务器上时,我们需要开启mysql的远程访问权限。 主流的有两种方法,改表法和授权法。 相对而言,改表法比较容