• ベストアンサー

BシェルでのIPアドレス範囲判定

こんにちは。 Bシェルにて、IPアドレスの範囲におさまっているかどうかの 判定を行う処理になりますが、このような関数など、ご存知の方が いればお願いします。 OSは、HP-UXになります。 例:192.168.1.0~192.168.1.255のIP範囲として、 192.168.1.11が、IP範囲かどうかを調べる処理です。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4843/10252)
回答No.2

bashなら多少は楽ですが。 shだと、 OIFS="$IFS" IFS=. set X $IP IFS="$OIFS" shift ANS=OK case $# in 4) ;; *) ANS=NG ;; esac case "$1.$2.$3" in 192.168.1) ;; *) ANS=NG ;; esac case "$4" in [0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]) ;; *) ANS=NG ;; esac のようにセパレータIFSを使って分解し、caseをつかったパターンマッチでやるしかないです。

yano-kouichi
質問者

補足

返事遅くなってすいません。 成功しました。 ありがとうございました。

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

純粋にシェルスクリプトの構文の範疇で、外部ツールは一切使用しない。 という前提でしょうか? また、素のBourne Shellで、bashとかではないのですね?

yano-kouichi
質問者

補足

そのとおりです。 ツールは使わず、シェルのみになります。

関連するQ&A

  • BシェルでIPアドレスの入力

    お世話になっております。 BシェルでIPアドレス、及び、SUBNETを 入力させるシェルを作成しております。 7桁以上15桁未満は処理しない方法は 分かるのですが 以下処理に困っております。 ・xxx.xxx.xxx.xxxの形式で処理する ⇒ 例) xxx..xxx.xxx.xxは処理しない ・数字以外は処理しない  ⇒ 例) 19a.168.11.1は処理しない 参考になるサイト、及び、情報などありましたら ご教示頂きたく宜しくお願い致します。 ■入力処理 while [ $ENV -eq 0 ]; do echo "IP" read SET_IP echo "SUBNET" read SET_SUBNET echo "IP :" $SET_IP echo "SUBNET:" $SET_SUBNET echo "yes/no" read ans case "$ans" in "yes" | "Yes" | "YES" | "y" | "Y" ) ENV=1 ;; "no" | "No" | "NO" | "n" | "N" ) ENV=0 ;; *) ;; esac done ■入力された値を確認する処理 追記したい処理  xxx.xxx.xxx.xxx形式である事を確認  条件  ⇒ 7桁以上15桁未満である   ⇒ xは数字である   ⇒ xx..xxx.xxx.xxx形式などは処理しない ■ネットワークファイルの書換え ■ネットワークサービスの再起動

  • IPアドレスの割り当てできる範囲の求め方

    IPアドレスの割り当てできる範囲の求め方 例 192.168.1.28/18 上記のIPアドレスの割り当て可能範囲を求める方法をなるべく詳しく教えて頂きたいです。 宜しくお願い致します。

  • Cシェル内でBシェルの様な関数の記述方法はありますか?

    タイトル通り、Cシェル内でBシェルの様な関数の記述方法はありますか? Bシェルで言う所の以下の様な記述方法です。 関数() { } OSはSolarisです。 よろしくお願いいたします。

  • IPアドレスを検査する関数

    与えられたIPアドレスが、指定した範囲に含まれているか否かをチェックしてくれるような関数、もしくはフリーのプログラムはないでしょうか。 IPアドレスの範囲指定は IPアドレス/ネットマスク の型式かまたは (最小のIPアドレス,最大のIPアドレス) の型式で与えられるものとします。 具体的にやりたいことは次のようなことです。 そのような関数があるとして、名前をIpcheckとします。 そして、例えば192.168.0.1 は 192.168.0.0/24 に含まれているので、 Ipcheck( 192.168.0.0/24 , 192.168.0.1) とすると TRUEを返し、 192.168.1.1 は 192.168.0.0/24 に含まれていないので、 Ipcheck( 192.168.0.0/24 , 192.168.1.1) とするとFAULSを返す もしくは範囲指定で 192.168.0.1 は 192.168.0.0~ 192.168.0.8に含まれているので Ipcheck( (192.168.0.0,192.168.0.8) , 192.168.0.1) とするとTRUEを返す。 という機能が欲しいのです。 実はPHPのスクリプトの中でこういう関数を使いたいのです。しかし、PHPの組込み関数にそういうものは無さそうだし、PHPで組んだらかなりオーバーヘッドになりそうなので、CまたはC++でこういうプログラムがあれば、(関数だったらインターフェイス部分は自作して)system関数で呼び出して使おうと考えています。 PHP(バージョン4)で出来る方法を御存じであれば、そちらも紹介して頂けるとありがたいです。 OSはRedhat Linux 9ですが、なるべくOS依存でないものをご紹介下さい。

  • IPアドレスについて教えて下さい。

    IPアドレスについて教えて下さい。(クラスCを例にします) クラスCは、192.0.0.0~223.255.255.255の範囲でIPアドレスが割り当てられますが、 192.0.0.0~192.167.255.255→グローバル 192.168.0.0~192.168.255.255→プライペート 192.169.0.0~223.255.255.255→グローバル ということなのでしょうか? すみません。よろしくお願いします。

  • シェルの中からシェルを呼び出して判定

    UNIXで以下のようなシェルが動作しております。 #!/bin/sh su abcdef -c './GHI'; err=$? if [! $err -eq 0 ] then echo エラーが発生しました fi exit このシェルは「abcdef」ユーザに移ってカレントディレクトリのシェルコマンド「GHI」の結果を判定するというものです。 UNIX上では問題なく動作しております。 これをLinuxでそのまま動作させると「err」に「su abcdef」というユーザ切替コマンド自身の正否を格納しているようです。 「'」でくくられた範囲内で結果をファイルに格納したりして、その後ファイルの中を見て判断するとうまくいくことは分かっておりますが、出来たらファイルなど使いたくありません。 このような場合、みなさんどうしてるんでしょうか? よく出てくるパタンだと思うのですがどうしても良い対処が見つかりません。 どうか宜しくお願いします。 Linuxは「miracle-Linux2.0」というOSです、いわゆるRedHat系です。

  • Bシェル内でのユーザー変更

    お世話になっております。 あるBシェルをJP1に登録しジョブ実行しようとしています。 Bシェル内には複数の処理があり、必要に応じてユーザー変更を行う必要があるのですが上手く行きません。 なお、禁止事項にrootユーザーでJP1実行、suid、guidの未指定があり上手く対応が出来ません。 どなたか上手く行く方法をご存知ありませんか? 行いたい処理は以下の通りです。 (1)実行ユーザーで実行 (2)posgreユーザーでログイン (3)ダンプファイルを取得 (4)posgreユーザーをログアウト (5)sshユーザでログイン (6)ダンプファイルを移動 (7)sshユーザをログアウト (8)終了 環境は シェルはBシェル OSはRHEL5.3 です。

  • IPアドレス(2)

    以前IPアドレスの事で質問させていただいたんですが またつまづいてしまいご助言願いたいと思いました。 現在使用しているグローバルIPが・・・ クラスBで、128.10.xxx.xxx の通りです そしてLANに繋いでる各端末に割当てている プライベートIPも128.10.xxx.xxxですが クラスBで割振るプライベートIPは 172.16.0.0~172.31.255.255 上記の範囲で割振らなければいけないと聞いたのですが 現行のグローバルIP 128.10.xxx.xxxで プライベートIPを単純に172.16.0.0~172.31.255.255 を割振って構わないのでしょうか?? それともグローバルIPを取得し直さなければダメか?? という所とその他諸々で悩んでいます。 プライベートIPはあくまでLAN内だけのアドレスだと思っていましたが何故使用出来る範囲が決まっているのか? すいませんが詳しい方がいましたら助けて下さい。

  • IPアドレスを取得する

    IPアドレスを取得するプログラムを作りたいのですが、 そのような関数はあるのでしょうか? ご存知の方がいらしたら教えてください。 お願いします。

  • ウェブサービスのIPアドレス範囲の特定

    QubesOSというOSで、FWを複数個作って仮想マシン(AppVMといいます)に割り当てて使えるのですが、ニコニコ動画とYoutubeしか見れないAppVMを作ろうと考えています。AppVM自体作るのはかんたんですぐできるのですが、FWに与える許可IPアドレスの範囲を調べるのがひとつわかりません。whoisを使用したりして、IPアドレスの範囲を特定するのでしょうか?