🤬
  • ■ ■ ■ ■ ■ ■
    Projects/0_JS_TCP_server/README.md
     1 +# TCP server and client CLI to send and receive messages made in NodeJS.
     2 + 
     3 +### Used Dependencies:
     4 + 
     5 +[colors](https://www.npmjs.com/package/colors)
     6 + 
     7 +[prompt-synch](https://www.npmjs.com/package/prompt-sync)
     8 + 
     9 +![cli image](https://i.imgur.com/xCmZrAe.png)
     10 + 
     11 + 
     12 +### How to use:
     13 +```
     14 +# Clone repository:
     15 +$ git clone https://github.com/kurogai/100-redteam-projects
     16 +# Enter the repository:
     17 +$ cd 100-redteam-projects\Projects\0_JS_TCP_server
     18 +# Install dependencies:
     19 +$ npm install
     20 +# Run server:
     21 +$ node ./server.js
     22 +# Run client CLI:
     23 +$ node ./client.js
     24 +```
     25 + 
     26 +Made by: [BurmeseCat](https://github.com/BurmeseCat)
  • ■ ■ ■ ■ ■ ■
    Projects/0_JS_TCP_server/client.js
     1 +const colors = require('colors');
     2 +const net = require('net');
     3 +const prompt = require('prompt-sync')();
     4 + 
     5 +let client = null;
     6 + 
     7 +const menuReturn = () => {
     8 + return setTimeout(() => menu(), 1500);
     9 +};
     10 + 
     11 +const createConnection = () => {
     12 + if (!client) {
     13 + const ADRESS = prompt('Type server adress: ') || '127.0.0.1'
     14 + const PORT = prompt('Type server port: ') || 8000;
     15 + 
     16 + client = new net.Socket();
     17 + 
     18 + client.connect(PORT, ADRESS, () => {
     19 + console.log(`Connected to ${ADRESS}:${PORT}`.bold.green);
     20 + });
     21 + 
     22 + client.on('error', (err) => {
     23 + console.log(`${err}`.bold.red);
     24 + client = null;
     25 + menuReturn();
     26 + })
     27 + 
     28 + } else console.log('You are alredy connected! End connection before new one!'.bold.red);
     29 + 
     30 +};
     31 + 
     32 +const destroyConnection = () => {
     33 + if (client) {
     34 + client.destroy();
     35 + client = null;
     36 + } else return;
     37 +};
     38 + 
     39 +const quitProgr = () => {
     40 + if (client) {
     41 + destroyConnection()
     42 + }
     43 + console.log('See you soon!'.rainbow);
     44 +};
     45 + 
     46 +const sendMessage = () => {
     47 + if (client) {
     48 + const message = prompt('Message to send: ');
     49 + client.write(message);
     50 + client.on('data', (data) => {
     51 + console.log(`Message from server: ${data.toString()}`);
     52 + })
     53 + menuReturn();
     54 + }
     55 + else {
     56 + console.log('First connect to server!'.bold.red);
     57 + menuReturn();
     58 + }
     59 +}
     60 + 
     61 +const menu = () => {
     62 + console.log(`${client ? 'CONNECTED'.bold.green : 'NOT CONNECTED'.bold.red}`);
     63 + console.log('(c)onnect, (s)end message, (d)isconnect, (q)uit'.bold.white)
     64 + const choose = prompt('Type option: '.bold.white);
     65 + 
     66 + switch (choose) {
     67 + case 'c':
     68 + createConnection();
     69 + menuReturn();
     70 + break;
     71 + case 's':
     72 + sendMessage();
     73 + break;
     74 + case 'd':
     75 + destroyConnection();
     76 + menuReturn();
     77 + break;
     78 + case 'q':
     79 + quitProgr();
     80 + return;
     81 + default:
     82 + menuReturn();
     83 + break;
     84 + }
     85 +};
     86 + 
     87 +menu();
  • ■ ■ ■ ■ ■ ■
    Projects/0_JS_TCP_server/package-lock.json
     1 +{
     2 + "name": "0_js_tcp_server",
     3 + "version": "1.0.0",
     4 + "lockfileVersion": 2,
     5 + "requires": true,
     6 + "packages": {
     7 + "": {
     8 + "name": "0_js_tcp_server",
     9 + "version": "1.0.0",
     10 + "license": "ISC",
     11 + "dependencies": {
     12 + "colors": "^1.4.0",
     13 + "prompt-sync": "^4.2.0"
     14 + }
     15 + },
     16 + "node_modules/ansi-regex": {
     17 + "version": "4.1.1",
     18 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
     19 + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==",
     20 + "engines": {
     21 + "node": ">=6"
     22 + }
     23 + },
     24 + "node_modules/colors": {
     25 + "version": "1.4.0",
     26 + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
     27 + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==",
     28 + "engines": {
     29 + "node": ">=0.1.90"
     30 + }
     31 + },
     32 + "node_modules/prompt-sync": {
     33 + "version": "4.2.0",
     34 + "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz",
     35 + "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==",
     36 + "dependencies": {
     37 + "strip-ansi": "^5.0.0"
     38 + }
     39 + },
     40 + "node_modules/strip-ansi": {
     41 + "version": "5.2.0",
     42 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
     43 + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
     44 + "dependencies": {
     45 + "ansi-regex": "^4.1.0"
     46 + },
     47 + "engines": {
     48 + "node": ">=6"
     49 + }
     50 + }
     51 + },
     52 + "dependencies": {
     53 + "ansi-regex": {
     54 + "version": "4.1.1",
     55 + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz",
     56 + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g=="
     57 + },
     58 + "colors": {
     59 + "version": "1.4.0",
     60 + "resolved": "https://registry.npmjs.org/colors/-/colors-1.4.0.tgz",
     61 + "integrity": "sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA=="
     62 + },
     63 + "prompt-sync": {
     64 + "version": "4.2.0",
     65 + "resolved": "https://registry.npmjs.org/prompt-sync/-/prompt-sync-4.2.0.tgz",
     66 + "integrity": "sha512-BuEzzc5zptP5LsgV5MZETjDaKSWfchl5U9Luiu8SKp7iZWD5tZalOxvNcZRwv+d2phNFr8xlbxmFNcRKfJOzJw==",
     67 + "requires": {
     68 + "strip-ansi": "^5.0.0"
     69 + }
     70 + },
     71 + "strip-ansi": {
     72 + "version": "5.2.0",
     73 + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz",
     74 + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==",
     75 + "requires": {
     76 + "ansi-regex": "^4.1.0"
     77 + }
     78 + }
     79 + }
     80 +}
     81 + 
  • ■ ■ ■ ■ ■ ■
    Projects/0_JS_TCP_server/package.json
     1 +{
     2 + "name": "0_js_tcp_server",
     3 + "version": "1.0.0",
     4 + "description": "",
     5 + "main": "index.js",
     6 + "scripts": {
     7 + "test": "echo \"Error: no test specified\" && exit 1"
     8 + },
     9 + "keywords": [],
     10 + "author": "",
     11 + "license": "ISC",
     12 + "dependencies": {
     13 + "colors": "^1.4.0",
     14 + "prompt-sync": "^4.2.0"
     15 + }
     16 +}
     17 + 
  • ■ ■ ■ ■ ■ ■
    Projects/0_JS_TCP_server/server.js
     1 +const net = require('net');
     2 +const colors = require('colors');
     3 +server = net.createServer();
     4 + 
     5 +server.on('connection', (s) => {
     6 + const remoteAddress = s.remoteAddress + ':' + s.remotePort;
     7 + console.log(`client connected ${remoteAddress}`.green);
     8 + 
     9 + s.on('data', (data) => {
     10 + console.log(`From ${remoteAddress} - ${data}`.yellow)
     11 + s.write(`Message from server!`);
     12 + });
     13 + 
     14 + s.on('close', () => {
     15 + console.log(`Client ${remoteAddress} disconnected`.white);
     16 + })
     17 + 
     18 + s.on('error', (err) => {
     19 + console.log(`${remoteAddress} error: ${err.message}`.red);
     20 + })
     21 +});
     22 + 
     23 + 
     24 +server.listen(8000, () => {
     25 + console.log('Server on...')
     26 +});
Please wait...
Page is in error, reload to recover