20200526のMacに関する記事は5件です。

[macOS,CentOS7]pingでIPアドレスを総当たりするシェルを作成する

概要

本書では自身PCのネットワーク上に存在するIPアドレスを特定するため、pingコマンドを利用してIPアドレスを総当たりするシェルスクリプトを作成します。この記事は筆者が執筆しました「[Windows10]pingでIPアドレスを総当たりするバッチを作成する」の動作をmacOS,CentOS7用にシェルクリプトを作成しました。

動作の流れ

  1. IPアドレス(24bit(xxx.xxx.xxx)まで)を入力する。
  2. 正しくIPアドレスが入力されているか確認する。
  3. xxx.xxx.xxx.0 から xxx.xxx.xxx.255 までpingを打つ。
  4. pingでヒットしたIPアドレスを表示する。(ARPテーブルを表示する)

シェルスクリプトの内容

macOS

#!/bin/sh

<< COMMENTOUT
ping_brute_force(macOS)
Copyright (c) 2020 yuichi1992_west
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
COMMENTOUT

# Regular expression variables
match_ip='[0-9][0-9][0-9][.][0-9][0-9][0-9][.][0-9][0-9][0-9]'

# enter ip address.
echo "Enter the ip address up to 24bit. ( Example: 192.168.100 )"
echo I"mportant!: If the target bit is 2 digits or less, enter 0 at the beginning. ( Example: 172.016.002 )"
echo -n "After entering, press Enter.  "
read ping_brute_force

# Regular expression judgment processing
if [[ $ping_brute_force =~ $match_ip ]] ;
then
    echo ""
    echo "The ip range is correct. Ping all IP addresses."
    echo ""

    echo "The IP address is brute-forced with the entered settings."

    for ((i=0;i<256;i++));
    do
        ping -c 1 -W 1 "${ping_brute_force}.${i}"
    done

    # Display ARP table
    echo "Display ARP table"
    arp -a

    read -p "Press [Enter] key to resume."

else
    echo ""
    echo "Important!"
    echo "Check the input format again and execute the bat file again. "
    echo "Especially when the target bit is 2 digits or less, be sure to add 0 at the beginning. "
    echo "Example: 172.016.005"
    read -p "Press [Enter] key to resume."
fi

exit 0

CentOS7

#!/bin/sh

<< COMMENTOUT
ping_brute_force(CentOS7)
Copyright (c) 2020 yuichi1992_west
This software is released under the MIT License.
http://opensource.org/licenses/mit-license.php
COMMENTOUT

# Regular expression variables
match_ip='[0-9][0-9][0-9][.][0-9][0-9][0-9][.][0-9][0-9][0-9]'

# enter ip address.
echo "Enter the ip address up to 24bit. ( Example: 192.168.100 )"
echo I"mportant!: If the target bit is 2 digits or less, enter 0 at the beginning. ( Example: 172.016.002 )"
echo -n "After entering, press Enter.  "
read ping_brute_force

# Regular expression judgment processing
if [[ $ping_brute_force =~ $match_ip ]] ;
then
    echo ""
    echo "The ip range is correct. Ping all IP addresses."
    echo ""

    echo "The IP address is brute-forced with the entered settings."

    for ((i=0;i<256;i++));
    do
        ping -c 1 -w 1 "${ping_brute_force}.${i}"
    done

    # Display ARP table
    echo "Display ARP table"
    ip n

    read -p "Press [Enter] key to resume."

else
    echo ""
    echo "Important!"
    echo "Check the input format again and execute the bat file again. "
    echo "Especially when the target bit is 2 digits or less, be sure to add 0 at the beginning. "
    echo "Example: 172.016.005"
    read -p "Press [Enter] key to resume."
fi

exit 0

動作結果(macOSの場合)

成功例

% bash ping_brute_force.sh
Enter the ip address up to 24bit. ( Example: 192.168.100 )
Important!: If the target bit is 2 digits or less, enter 0 at the beginning. ( Example: 172.016.002 )
After entering, press Enter.  192.168.000

The ip range is correct. Ping all IP addresses.

The IP address is brute-forced with the entered settings.
PING 192.168.000.0 (192.168.0.0): 56 data bytes

--- 192.168.000.0 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss, 1 packets out of wait time
round-trip min/avg/max/stddev = 15.614/15.614/15.614/0.000 ms
(省略)
PING 192.168.000.126 (192.168.0.126): 56 data bytes

--- 192.168.000.126 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss, 1 packets out of wait time
round-trip min/avg/max/stddev = 10.611/10.611/10.611/0.000 ms
(省略)
PING 192.168.000.254 (192.168.0.254): 56 data bytes

--- 192.168.000.254 ping statistics ---
1 packets transmitted, 0 packets received, 100.0% packet loss
PING 192.168.000.255 (192.168.0.255): 56 data bytes
64 bytes from 192.168.0.230: icmp_seq=0 ttl=64 time=0.087 ms

--- 192.168.000.255 ping statistics ---
1 packets transmitted, 1 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 0.087/0.087/0.087/0.000 ms

Display ARP table
? (192.168.0.1) at 74:da:88:a0:e8:19 on en0 ifscope [ethernet]
? (192.168.0.111) at (incomplete) on en0 ifscope [ethernet]
? (192.168.0.112) at (incomplete) on en0 ifscope [ethernet]
? (192.168.0.126) at 54:60:9:70:ba:4c on en0 ifscope [ethernet]
(省略)
? (192.168.0.254) at (incomplete) on en0 ifscope [ethernet]
? (192.168.0.255) at ff:ff:ff:ff:ff:ff on en0 ifscope [ethernet]
Press [Enter] key to resume.

失敗例

% bash ping_brute_force.sh
Enter the ip address up to 24bit. ( Example: 192.168.100 )
Important!: If the target bit is 2 digits or less, enter 0 at the beginning. ( Example: 172.016.002 )
After entering, press Enter.  1

Important!
Check the input format again and execute the bat file again.
Especially when the target bit is 2 digits or less, be sure to add 0 at the beginning.
Example: 172.016.005
Press [Enter] key to resume.

動作について

  • IPアドレス(24bit)の正規表現を変数に入れる。
match_ip='[0-9][0-9][0-9][.][0-9][0-9][0-9][.][0-9][0-9][0-9]'
  • 任意のIPアドレス(24bit)をユーザーに入力してもらう。
read ping_brute_force
  • 入力してもらった値(ping_brute_force変数)と正規表現(match_ip変数)を比較する。
if [[ $ping_brute_force =~ $match_ip ]] ;
  • 正しいIPアドレス(24bit)が入力されている場合は、xxx.xxx.xxx.0からxxx.xxx.xxx.255までpingを打つ。
for ((i=0;i<256;i++));
do
    ping -c 1 -W 1 "${ping_brute_force}.${i}"
done
  • ARPテープルを表示する。
arp -a

最後に

macOS,CentOS用のpingでIPアドレスを総当たりするシェルスクリプトを作成しました。これによって、自身PCのネットワークに存在しているyIPアドレスを特定することができると思います。このシェルスクリプトを利用することで、使用されていないIPアドレスを確認すること、既に使用されているIPアドレスを特定することに役立つと思います。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Macのdockerが遅いストレスから解放されよう

Mackのdocker遅い問題

Macで開発している時、主にRailsなのですがdockerを使うと遅くなるのが嫌でずっと避けてましたが、とあるプロジェクトでBFF構成にし開発環境とデプロイ環境をECS化したりとでdocker化の流れに抗えない状況になりました。

ただ、やはり遅い。

dockerが不慣れなこともありますが、Macのdockerなかなか遅い。

そしてMacが遅い件を調べてみてもみなさん困られるのが伺えます。

そんな中で対策としてよく見かけるのが

  • docker-sync
  • vagrantで別立て

の2つでした。

どちらが最適なのかな?と思い悩んでると、

ありました。dockerのドキュメントにまさにこの件に対しての内容が。

https://docs.docker.com/docker-for-mac/osxfs-caching/

ボリュームマウントのチューニング

端的にまとめるとv17.04からcacheddelegatedというオプションが追加され、書き込み読み込みの一貫性を担保しない(※)代わりにパフォーマンスが向上されるものです。

※コンテナ側で発生した変更がホスト側に書き込みされるまで遅延を許容する。

即時性を求められたり大規模な処理を組むこともなく、開発環境だけで使うことから現状大きな支障はないと思いこちらのオプションを利用することにしました。

導入の仕方

  • volumesの指定の最後に:delegatedをつけていつも通りdocker-compose upを実行
services:
  app:
    volumes:
      - .:/project/sample_app:delegated

tips

linuxやwindowsユーザーの方と一緒に開発する場合は必要ないかと思うので、そんな時は通常使うdocker-compose.ymlに基本的な設定そのままにdocker-compose-local.ymlのように、別ファイル名のymlを用意します。

そこに例のようにservices:サービス名:vpluems:マウント先:に:delegateオプションを追加したものをのみを残し

docker-compose -f docker-compose.yml -f docker-compose-local.yml up

とオプション指定すればvolumesの指定のみ上書かれるのでMacユーザーの方はこちらを利用したら住み分けできて便利です。

※docker-compose.ymlにversion指定されていたら、versionの指定は合わせます。

改善の結果

ただのindexのレコード取得でも数秒、初回アクセスで10秒オーバーするケースがあったものが普通にサクサクと動くようになりました。

プロジェクトの内容や要件に合わせてですが、遅すぎてストレスが激しくdocker嫌いになる前に是非試してみてください。

まず困ったら公式ドキュメントをしっかり読むことの大事さを改めて実感する一件でした。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

右Commandキーで英数・かなをトグルしたかった

HHKBのUS配列を購入したので Karabiner-Elements で右Commandキーの機能を英数・かなトグルにしようと調べた結果、以下の設定を発見。

For Japanese (日本語環境向けの設定) (rev 5)

この中の "コマンドキー(右のみ)を単体で押したときに、英数・かなをトグルで切り替える。 (rev 2)" でトグルできる事を確認。

問題

ただし、この設定では以下のような問題があった。

  • 「単体で押した時」という条件がある
  • キーアップのタイミングで英数・かなをトグルする
  • キーコンビネーション時に右Commandキーが復活する

これらの制約のため、押し方次第でトグルしなかったり、半角スペースを打とうとした時にAlfredが起動してしまっていた。

解決

Karabiner-Elementsの設定項目をまとめました に設定方法があった。
これを参考にしながら前述の設定を以下のようにアレンジ。

right_command_eisuu_kana_toggle.json
{
  "title": "右コマンドキーで英数・かなをトグル",
  "rules": [
    {
      "description": "右コマンドキーを押したときに、英数・かなをトグルで切り替える。",
      "manipulators": [
        {
          "type": "basic",
          "conditions": [
            {
              "input_sources": [
                {
                  "language": "ja"
                }
              ],
              "type": "input_source_if"
            }
          ],
          "from": {
            "key_code": "right_command",
            "modifiers": {
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "japanese_eisuu"
            }
          ]
        },
        {
          "type": "basic",
          "conditions": [
            {
              "input_sources": [
                {
                  "language": "en"
                }
              ],
              "type": "input_source_if"
            }
          ],
          "from": {
            "key_code": "right_command",
            "modifiers": {
              "optional": [
                "any"
              ]
            }
          },
          "to": [
            {
              "key_code": "japanese_kana"
            }
          ]
        }
      ]
    }
  ]
}

変更点

parameters, to_if_held_down, to_if_alone は不要なので削除

to_if_held_down は parameters の basic.to_if_held_down_threshold_milliseconds で指定されたミリ秒後に発火するキーの指定。
ここは right_command と指定されている。
to_if_held_down の機能は利用しないため、今回はどちらの指定も不要。

to_if_alone はキーを単体で押下した場合に発火するキーの指定。今回は単体・コンビネーション関係無くトグルさせたいため不要。

to に本来指定したいキーを設定

right_command と指定されているため、それぞれ japanese_eisuu japanese_kana を指定。

変更しなかった点

modifiers

modifiers を取ると、コンビネーションキーと組み合わせた時に右Commandキーが復活してしまう。

解決したようなしてないような

キーアップではなくキーダウンでトグルされるようになり、トグル漏れが起きる回数が減ったため概ね想定通りに動くようになった。(Alfredも顔を出してこなくなったし。)

しかし、コンビネーションキーと組み合わせるとうまくトグルしない事を確認。
もしかするとコンビネーションキーが押されているとコンディションをうまく判断してくれない?

右Alt+右Command同時押し二回、右Altを押しながら右Commandを数回、右Commandのみを数回押した場合の結果。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

macOSのVSCodeでターミナルを開くときにtmuxが起動してしまう件

環境

  • ProductName: Mac OS X Catalina 10.15.4
  • Visual Studio Code 1.45.1

VSCodeのターミナルとtmuxは相性が悪い

私はzshが起動する際にtmuxが自動起動するように設定していますが、VSCodeのターミナル側でも同じようにtmuxが立ち上がってしまいます。
何がいけないかというとtmuxのコマンドが正常に動作しないことと、copymodeに入ってもコピペがうまくいかないことなどが挙げられます。

解決法

そこでVSCodeのターミナルで起動した際にはtmuxを自動起動しないように~/.zshrcに記述しました。
以下のコードです。

[[ -z "$TMUX" && ! -z "$PS1" && $TERM_PROGRAM != "vscode" ]] && tmux

$TERM_PROGRAMには現在使用しているターミナルアプリの名称が入ります。
なのでvscodeで開いていた場合にはtmuxが起動しないように記述しています。

参考サイト

macOS で Visual Studio Code を使うためのアレコレ (2020/03/09)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MacでLogisimを使う

Logisim

Logisimとは論理回路設計用アプリケーションです。

http://www.cburch.com/logisim/

Logisimのダウンロード

こちらのURLのDownloadボタンからダウンロードすることができます。

https://sourceforge.net/projects/circuit/

ダウンロードしたtarファイルを Ctrl + Click から開きインストールします。
スクリーンショット 2020-05-26 2.38.18.png

brewのインストール

brewを既にインストールしてる方は飛ばしてください。

$ xcode-select --install
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"

brew caskのインストール

$ brew install cask

参考記事

MacにHomebrewを導入する方法
https://qiita.com/balius_1064/items/ac7dff5ef10eaf69996f

Javaのインストール

Logisimを動作させるためjava6をインストールします。

Macにjavaが既にインストールされているか確認

$ /usr/libexec/java_home -V

何もインストールされてない場合の表示↓
スクリーンショット 2020-05-26 2.01.30.png

java6のインストール

brewを使ってインストールします。

$ brew tap homebrew/cask-versions
$ brew cask install java6

インストールされているか確認

$ /usr/libexec/java_home -V

正しくインストールできている場合の表示↓
スクリーンショット 2020-05-26 2.02.49.png

Logisimを開く

LogisimもCtrlを押しながらクリックして開きます。
最初は開くときに警告?的なのがでますが無視して開いて大丈夫です。

スクリーンショット 2020-05-26 2.44.03.png

無事開くことができました!
スクリーンショット 2020-05-26 2.48.23.png

参考記事

Homebrewでjava6をインストールする方法
https://qiita.com/ponsuke0531/items/9be8dee67a91c6c78d4f

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む