2

我正在做一个小项目,需要为我的团队成员提供一种替代方法来端口敲击非生产服务器并为 SSH 流量打开端口 22(访问在 10 分钟后再次关闭)。由于某些敲门方法不适用于不同设备上的不同用户,因此我们需要创建一个“最后的敲门客户端”,它可以作为独立网页打开并启动敲门序列。当然,出于安全原因,这个文件永远不会放在网络服务器上。

我是 jQuery、javascript 和 CSS 的新手,但能够让它工作。但是,它并不适用于所有浏览器,有时如果它不再在特定机器上运行,我们必须重新启动。

经过大量搜索,我真的不确定如何改进我的代码,同时将所有功能都包含在一个 html 文件中。我真的很感激一些意见。

<!DOCTYPE HTML>
<html>
<head>
<title>Gain Access- Beta version 1.0</title>
<style>
* {
    font-family: Verdana, Arial, Sans-Serif;
}
#top{
    margin-left:80px;
}
#heading {
    margin-left: 0px;
    font-size:22px;
    font-weight:bold;
}
#subhead {
    margin-left: 10px;
    font-size:12px;
}
button {
    font-size:16px;
    margin-left:100px;
}
#button {
    font-size: 12px;
    font-family: Verdana, Arial, Sans-Serif;
    position: absolute;
    margin-left: 100px;
    margin-top: 50px;
}
#status {
    margin-left:90px;
    margin-top: 80px;
    position: absolute;
    font-size:16px;
    font-weight:bold;
}
#knocks {
    margin-left:110px;
    margin-top: 100px;
    position: absolute;
    font-size:14px;
    color:blue;

}
#portals {
    position: absolute;
    margin-left: 110px;
    margin-top: 155px;
    display:none;
}
.tinyimg {
    width: 1px;
    height: 1px;
}

</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>

<script type="text/javascript">


$(document).ready(function(){
$('button').click(function(){
    $('#knocks').append('<p>Knocking...</p>');
    setTimeout(function(){
        $('#portals').append('<img class="tinyimg" src="https://some.url.com:1111/test/url.jpg/" />');
        $('#knocks').append("<p>Knock 1 of 5 complete...</p>");
        }, 500);    
    setTimeout(function(){
        $('#portals').append('<img class="tinyimg" src="https://some.url.com:2222/test/url.jpg/" />');
        $('#knocks').append("<p>Knock 2 of 5 complete...</p>");
        }, 3500);
    setTimeout(function(){
        $('#portals').append('<img class="tinyimg" src="https://some.url.com:3333/test/url.jpg" />');
        $('#knocks').append("<p>Knock 3 of 5 complete...</p>");
        }, 6500);
    setTimeout(function(){
        $('#portals').append('<img class="tinyimg" src="https://some.url.com:4444/test/url.jpg" />');
        $('#knocks').append("<p>Knock 4 of 5 complete...</p>");
        }, 9500)
    setTimeout(function(){
        $('#portals').append('<img class="tinyimg" src="https://some.url.com:5555/test/url.jpg/" />');
        $('#knocks').append("<p>Knock 5 of 5 complete...</p>");
        }, 12000);
    setTimeout(function(){
        $('#knocks').append("<p>Knocking is complete... <br>Proceed to site: <a href='http://secureurl.someurl.com'>http://secureurl.someurl.com/a></p>");
        }, 13000);
});
});


</script>

</head>
<body>
<div id="top">
<p><span id="heading">Gain Access</span><br><span id="subhead">Beta version 1.0</span></p>
</div>
<button type="button">Click to Knock</button>
<div id="portals"></div> <!--The image references created by the port knocks land in this div.-->
<p id="status">Status:</p>
<div id="knocks"><p>Click button to knock</p></div> <!--The status updates generated concurrently with each port knock are displayed here.-->
</body>
</html>
4

1 回答 1

0

您正在使用GET对图像的请求来端口敲击您的服务器。我假设服务器不回复这些请求,甚至过滤它们,所以它们最终会超时。

如果之前的尝试超时,某些浏览器可能不愿意执行相同的请求。他们也可能实现一个队列并且同时只发送几个请求,如果这些请求在你必须发送下一部分敲门时仍然挂起(标准 TCP 超时为 30 秒),这可能会导致问题。

如果可能的话,用WebSockets重新实现你的敲门协议。

如果您对图像感到困惑,请尝试附加"?" + $.now()到您的 URL,以便它们对于每个请求都是唯一的。它可能有助于防止浏览器放弃特定请求。

于 2013-02-26T19:15:42.117 回答