Тема: HTA: OstroSoft Winsock Component
"OstroSoft Winsock Component" - ActiveX для работы с Winsock.
Отечественный, бесплатный для использования в некоммерческих приложениях. Небольшого размера. Корректно работает с JavaScript.
По ссылке скачивается zip с документацией и примерами использования на VBS, JS, и других языках.
Программный доступ к Winsock открывает нам широчайшие возможности для построения самых разнообразных приложений использующих протокол TCP/IP.
В примерах приведена процедура загрузки web-страницы по протоколу http. Таким же макаром можно загружать файлы по ftp. Один умелец сочинил web-сервер на JS. Так же можно реализовать Telnet-сервер или клиента. Или, например, сочинить сетевой чат. Все зависит от вашей фантазии.
Пример загрузки html кода веб-страницы:
<html>
<head>
<meta http-equiv=content-type content="text-html; charset=utf-8">
<meta http-equiv=MSThemeCompatible content=yes>
<hta:application
innerBorder=no
scroll=no
selection=no
contextMenu=no
singleinstance=yes
>
<title>Get Page with OstroSoft Winsock component</title>
<object id="oWinsock" style="display:none;" classid="CLSID:37F9EE2B-98A7-49D7-B505-94DFCE7FAC60"></object>
<script for="oWinsock" event="OnConnect()" type="text/javascript">
oWinsock.SendData('GET /' + sPage + ' HTTP/1.0\r\nHost: ' + sHost + '\r\nAccept: text/html\r\n\r\n');
</script>
<script for="oWinsock" event="OnError(Number, Description, Scode, Source, HelpFile, HelpContext, CancelDisplay)" type="text/javascript">
alert(Number + ': ' + Description);
</script>
<script for="oWinsock" event="OnDataArrival(bytesTotal)" type="text/javascript">
idSource.insertAdjacentText('BeforeEnd', oWinsock.GetDataBuffer());
oWinsock.CloseWinsock();
</script>
<script type="text/javascript">
var sPage = '';
var sHost = '';
function Connect(){
idSource.innerText = "";
if (/^(\w+?:\/\/)*([^\/:]+):*(\d*)\/*(.*?)$/.test(idURL.value)) {
sHost = RegExp.$2;
var nPort = RegExp.$3 || 80;
sPage = RegExp.$4;
alert("Host:\t" + sHost + "\nPort:\t" + nPort + "\nPage:\t" + sPage);
oWinsock.Connect(sHost, nPort);
} else {
alert("Invalid URL");
}
}
</script>
</head>
<body style="background-color:threedface;">
<table style="width:100%; height:100%">
<tr>
<td style="width:100%;"><input id="idURL" type="text" value="http://www.ostrosoft.com/oswinsck.asp" style="width:100%;"></td>
<td><input type=button onClick="Connect()" value=GetPage hidefocus></td>
</tr>
<tr style="height:100%">
<td colspan="2"><textarea id="idSource" style="width:100%; height:100%"></textarea></td>
</tr>
</table>
</body>
</html>
Пример сканера открытых портов на локальном или удаленном ПК:
<html>
<head>
<meta http-equiv=content-type content="text-html; charset=utf-8">
<meta http-equiv=MSThemeCompatible content=yes>
<hta:application
innerBorder=no
scroll=no
selection=no
contextMenu=no
singleinstance=yes
>
<title>Ports Scanner</title>
<script type="text/javascript">
window.resizeTo(280, 380);
var aPorts = [21,22,23,25,80,110,139,143,445,1433,1521,3306,3389,5631,5900];
var i = 0;
function CheckNextPort(){
if (i < aPorts.length){
var nPort = aPorts[i];
Logging(nPort + '\t');
oWinsock.Connect(idHost.value, nPort);
i++;
}
}
function Logging(text){
idLog.insertAdjacentText('BeforeEnd', text);
}
</script>
</head>
<body style="background-color:threedface;">
<table style="width:100%; height:100%">
<tr>
<td>Host:</td>
<td style="width:100%;"><input id="idHost" type="text" value="127.0.0.1" style="width:100%;"></td>
<td><input type=button onClick="idLog.innerText=''; CheckNextPort()" value=CheckPorts hidefocus></td>
</tr>
<tr style="height:100%">
<td colspan="3"><textarea id="idLog" style="width:100%; height:100%"></textarea></td>
</tr>
</table>
</body>
<object id="oWinsock" style="display:none;" classid="CLSID:37F9EE2B-98A7-49D7-B505-94DFCE7FAC60"></object>
<script type="text/javascript">
function oWinsock::OnConnect(){
oWinsock.CloseWinsock();
}
function oWinsock::OnError(){
Logging('CLOSE\n');
CheckNextPort();
}
function oWinsock::OnClose(){
Logging('OPEN\n');
CheckNextPort();
}
</script>
</html>
Обсудить компонент и решения можно тут.