はじめに
今回はChild_Process(Node.js)を使って、pcを他のpcからコマンドで操作するようなコード(?)を書きます
自分以外のpcで実行しないでください。
あとセキュリティ性を無視して書いてるので、実行することをあまりおすすめしません。
必要なモジュール
以下のコマンドを実行してください。
cmd, powershell
npm install express cors child_process
フォルダ構成
フォルダ構成
-------------|
|---public|
| |---index.html
|
|--app.js
|
|--run.bat
※...run.batは起動時にタスクスケジューラで開始するために書いたものなので、OS起動時にapp.jsを実行したくない人はコピペしなくても大丈夫です
コードのコピペ
以下のコードをコピペしてください。
app.js
/* ローカルネットワーク内でコマンドを実行するためのファイル
ちなみに使用できるコマンドはOSに左右されます
注意:決して悪用しないでください。法に触れる可能性があります */
const express = require('express');
const cors = require('cors');
const path = require('path');
const { exec } = require('child_process');
const app = express();
app.use(express.static(path.join(__dirname, 'public')));
app.use(cors());
app.use(express.json());
exec("chcp 65001", (error, stdout, stderr) => {
if(error || stderr) {
console.error(`error: ${error}, \nstderr: ${stderr}`)
}
})
app.get('/', (req, res) => {
res.sendFile(path.join(__dirname, 'public', 'index.html'));
});
app.post('/crun', (req, res) => {
const cs = req.body.cname; // 実行したいコマンド名
if (!cs) {
return res.json({ error: "command is null" });
}
exec(cs, { encoding: 'utf8' }, (error, stdout, stderr) => {
if (error) {
console.error(`command execute error: ${cs}\nError Code: ${error.code}\nStderr: ${stderr}`);
return res.json({
error: `command execute error: ${cs}\nerrorcode: ${error.code}\n${stderr}`
});
}
if (stderr.length > 0) {
console.warn(`command warning: ${cs}\nStderr: ${stderr}`);
return res.json({
warning: `error\n${stderr}`
});
}
console.log(`user executed command: ${cs}, \nresult: ${stdout}`);
res.json({
success: `command success: ${cs}`,
logs: stdout
});
});
});
app.listen(80, '<Your_address>', () => { //自分のIPアドレスなどに変更
console.log('server running on default. listener Count:', app.listenerCount());
});
index.html(コマンドを指定するページ):
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Remote Execute commands</title>
</head>
<body>
<center>
<h1>run command</h1>
<p>コマンドの詳細はCtrl+Shift+I⇒consoleから確認できます</p>
<input type="text" id="command">
<p id="navigation"></p>
</center>
</body>
<script>
const navi = document.getElementById('navigation');
const command = document.getElementById('command');
window.onload = function() {
command.addEventListener('keydown', (event) => {
if(event.key === "Enter") {
fetch('/crun', {
method: 'POST',
headers: {
"content-type": "application/json"
}, body: JSON.stringify({
cname: command.value
})
})
.then(response => response.json())
.then(data => {
if(data.error) {
console.log(data.error);
navi.style.color = "red";
navi.textContent = `Error: ${data.error}`
return;
}
navi.style.color = "black";
navi.textContent = `${data.success}`
console.log(data.logs); //ログの表示
})
}
})
}
</script>
</html>
run.bat(ちなみに動作確認してないので、必要に応じて修正してください。)
run.bat
chcp 65001 ::pathに日本語が含まれていたときにcdが正しく実行されないから
cd <Your_path>
node app.js
使い方
app.jsを編集して、のところを操作されるpc側のアドレスに置き換えてください。その後にnode app.js
を実行してください。
ちなみに自分の場合は 192.168.11.22
に置き換えました。
最後に
今回はChild_process(Node.js)を使ってコマンドで他のpcを操作するようなコードを書いてみました。ちなみに他の人のpcでは実行しないでください。
それではまたお会いしましょう。