2

私は小規模なプロジェクトに取り組んでおり、チーム メンバーが非運用サーバーでポート ノックを行い、SSH トラフィック用にポート 22 を開くための代替方法を提供する必要があります (アクセスは 10 分後に再び閉じられます)。ノックのいくつかの方法は、さまざまなデバイスのさまざまなユーザーには機能しないため、スタンドアロンの Web ページとして開いてノック シーケンスを開始できる「最終手段のノック クライアント」を作成する必要がありました。もちろん、セキュリティ上の理由から、このファイルを Web サーバーに置くことは決してありません。

jQuery、javascript、および CSS は初めてですが、これを機能させることができました。ただし、すべてのブラウザーで機能するわけではなく、特定のマシンで機能しなくなった場合は、再起動する必要がある場合があります。

多くの検索を行った後、すべての機能を 1 つの 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秒です)。

可能であれば、WebSocketを使用してノッキングプロトコルを再実装します。

画像が詰まっている場合は"?" + $.now()、URLに追加して、リクエストごとに一意になるようにしてください。ブラウザが特定のリクエストをあきらめるのを防ぐのに役立つ場合があります。

于 2013-02-26T19:15:42.117 に答える