0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Node.jsで他のPCからコマンドでPCを操作するようなコード(?)を書いてみた

Posted at

はじめに

今回は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では実行しないでください。
それではまたお会いしましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?