いずれもroot権限でないとできないっぽい
nmapを使う方法
nmap -sP -n 192.168.1.0/24
arp-scanを使う方法
apt install arp-scan
sudo arp-scan -I eth*とかens* -l
netdiscoverを使う方法
こっちはリアルタイムで変化するとのこと
apt install netdiscover
netdiscover -r 192.168.1.0/24
qで終了できるu
いずれもroot権限でないとできないっぽい
nmap -sP -n 192.168.1.0/24
apt install arp-scan
sudo arp-scan -I eth*とかens* -l
こっちはリアルタイムで変化するとのこと
apt install netdiscover
netdiscover -r 192.168.1.0/24
qで終了できるu
最近になってSlack APIに追加された新機能 普段使ってるタイムライン上でボタン出せるよ!って話
ニュースになって(一部の界隈では)結構話題になった
その割に「実際に試してみた」的な記事は殆ど見かけない。あのQiitaですら音沙汰ない(平成28年7月2日現在)
何故か、理由は簡単で APIはシンプルなくせに実装がくっそ煩わしいから である
けどどうしてもボタンを作ってみたくなったので試しにやってみた
数値はポート番号を表す。
[ いんたーねっと ]-----[ ルーター ]--443--[ nginx ]--3000--[botkit]
繰り返すがLet's Encryptでもできた 要はHTTPSなら何でもいいっぽい(オレオレ証明書は未確認)
これが結構ややこしい
https://api.slack.com/apps/newにアクセスしてアプリを作る 作成時は適当でもおk
次にココからさっき作ったアプリの設定画面に行き各種設定を行う
https://YOUR_HOST/oauth
にするhttps://YOUR_HOST/slack/receive
にする省略 リバースプロキシ役なので適当に443でlistenしてhttp://localhost:3000に投げればおk
npm init
して npm install -S botkit
は予めやっておく bot.jsとして以下を作成
var Botkit = require('botkit'); /*********************************** * Setup ***********************************/ if (!process.env.clientId || !process.env.clientSecret || !process.env.port) { console.log('Error: Specify clientId clientSecret and port in environment'); process.exit(1); } var controller = Botkit.slackbot({ json_file_store: './bot_db/' }).configureSlackApp( { clientId: process.env.clientId, clientSecret: process.env.clientSecret, scopes: ['bot'] } ); controller.on('create_bot',function(bot,config) { if (_bots[bot.config.token]) { // already online! do nothing. } else { bot.startRTM(function(err) { if (!err) { trackBot(bot); } bot.startPrivateConversation({user: config.createdBy},function(err,convo) { if (err) { console.log(err); } else { convo.say('I am a bot that has just joined your team'); convo.say('You must now /invite me to a channel so that I can be of use!'); } }); }); } }); // Handle events related to the websocket connection to Slack controller.on('rtm_open',function(bot) { console.log('** The RTM api just connected!'); }); controller.on('rtm_close',function(bot) { console.log('** The RTM api just closed'); // you may want to attempt to re-open }); controller.setupWebserver(process.env.port,function(err,webserver) { controller.createWebhookEndpoints(controller.webserver); controller.createOauthEndpoints(controller.webserver,function(err,req,res) { if (err) { res.status(500).send('ERROR: ' + err); } else { res.send('Success!'); } }); }); var _bots = {}; function trackBot(bot) { _bots[bot.config.token] = bot; } controller.storage.teams.all(function(err,teams) { if (err) { throw new Error(err); } // connect all teams with bots up to slack! for (var t in teams) { if (teams[t].bot) { controller.spawn(teams[t]).startRTM(function(err, bot) { if (err) { console.log('Error connecting bot to Slack:',err); } else { trackBot(bot); } }); } } }); /************************** * Reply **************************/ controller.hears('hi', ['direct_message','direct_mention','mention'],function(bot,message) { var reply = { "text": "朝にする挨拶は?", "attachments": [{ "text": "どれか1つ選んでね", "fallback": "failed...", "callback_id": "my_quiz", "color": "#3AA3E3", "actions": [ { "type": "button", "name": "atari", "text": "おはよう" }, { "type": "button", "name": "hazure", "text": "こんにちは" }, { "type": "button", "name": "hazure", "text": "こんばんわ" } ] }] }; bot.reply(message, reply); }); controller.on('interactive_message_callback', function(bot, message) { var users_answer = message.actions[0].name; if (users_answer == "atari") { bot.replyInteractive(message, "正解!"); }else { bot.replyInteractive(message, "はずれ。。。。"); } });
コードは以下を参考にした
clientId=CLIENT_ID clientSecret=CLIENT_SECRET port=3000 node bot.js
記事が多すぎて逆に分からんは(といいつつ書く
git clone https://github.com/letsencrypt/letsencrypt.git cd letsencrypt/ ./letsencrypt-auto
実行
./certbot-auto certonly --standalone -d example.com
server { listen 443; server_name _; root /var/www/html; index index.html index.htm; ssl on; ssl_certificate /etc/letsencrypt/live/www.encrypt.local/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.encrypt.local/privkey.pem; }
/
から始まるアレ
/remind me コンビニに寄る in 3 hours
上のはリマインダー よく使う
今回はこんな便利な機能であるスラッシュコマンドをbotkit自作しようと言う話
面倒なので /hello
って打ったらこんにちは!
って返すbotを作る
まずhttps://my.slack.com/services/new/botにアクセスしてSlack Commandを作成する
/hello
http://HOST_NAME/slack/receive
httpsである必要はないmkdir slack-hello cd slack-hello npm init npm install -S botkit
適当に bot.jsでも作って以下
var Botkit = require('botkit'); if (!process.env.token) { console.log('Error: Required Token'); process.exit(1); } var controller = Botkit.slackbot({ debug: false }); var bot = controller.spawn({ token: process.env.token }).startRTM(); // Webサーバー(express)起動 controller.setupWebserver(process.env.port, function(err, webserver) { controller.createWebhookEndpoints(controller.webserver); }); controller.on('slash_command', function(bot, message) { if ('/hello' === message.command) { bot.replyPublic(message, 'Hello!'); } });
token=**** port=3000 node bot.js
これで挨拶を返してくれるはずである
返信の方法は2種類ある
だれにでも見られるreplyPublic
bot.replyPublic(message, 'Hello!');
コマンドを実行した人にしか見れないreplyPrivate
bot.replyPrivate(message, 'Hello!');
mPro:botkit_test thr3a$ sw_vers ProductName: Mac OS X ProductVersion: 10.11.5 BuildVersion: 15F34 mPro:botkit_test thr3a$ npm -v 3.8.3 mPro:botkit_test thr3a$ node -v v5.10.0
ココからキーを取得して控えておく
npm install -S botkit
var Botkit = require('botkit'); var controller = Botkit.slackbot({ debug: false }); # プログラム controller.spawn({ token: 'API KEY' }).startRTM() controller.hears('ping',['direct_message','direct_mention','mention'],function(bot,message) { bot.reply(message,'pong'); });
mPro:botkit_test thr3a$ node bot.js info: ** No persistent storage method specified! Data may be lost when process shuts down. info: ** Setting up custom handlers for processing Slack messages info: ** API CALL: https://slack.com/api/rtm.start notice: ** BOT ID: debug ...attempting to connect to RTM! notice: RTM websocket opened