java怎么判断网络端口_如何检查客户端的网络/防火墙是否开放端口?

最后使用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

—>查看此页面):

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值