å°ãåãŸã§ã¯ãããã€ã¹ã®æ§æã倧éã«æŽæ°ããåé¡ã解決ããå¿
èŠããããŸããã ãµãŒãã¹ã§åãæ©èœãå®è¡ããããã€ã¹ãè€æ°ããå Žåã®æšæºã·ã¹ãã 管çã¿ã¹ã¯ã ããšãã°ãå©çšå¯èœãª
redmine.nocproject.orgããã®ãœãªã¥ãŒã·ã§ã³çšã®ãŠãããŒãµã«è£œåããããŒããã©ãŒã©ã ãããŒã¿ã«ã§åºã衚çŸãããŠããå€ãã®ã¹ã¯ãªããããããŸãã ãã®å Žåã®ããã«ãããªãèªèº«ã®æžãããã¹ã¯ãªãããæå
ã«ããã¯ãã§ããããããã¯å€æããŸããã§ããã
èšè¿°ã«ã¯ã
expect-expect.sourceforge.netã䜿çšããŸãããããã¯ãããŸããŸãªå¯Ÿè©±åã³ã³ãœãŒã«ãŠãŒãã£ãªãã£ãç¹ã«telnetã®å¿çãåŠçããŠå¿çã§ããTCLã®ã¢ããªã³ã§ãã TCLã以åã«äœæããå¿
èŠããªãã£ããããã³ãŒããåèããå¿
èŠããããŸããã ã¹ã¯ãªããã®éèŠãªç¬éã¯ãåŠçã®ããã®IPv4ã¢ãã¬ã¹ã®ãªã¹ãã®ãžã§ãã¬ãŒã¿ãŒã§ãããæ
éã«è©äŸ¡ããçµæããã®ããã°ã©ã ã¯ãç§ã®æèŠã§ã¯ã倧å¹
ã«æé©åã§ããå°ãªããšã3åã®1ã®è¡æ°ãåæžããæ°ããæ©èœãç°¡åã«è¿œå ã§ããŸããã ããã«ãããããã¹ãŠã®åæžã¯TCLã®è©³çްãšã¯ã»ãšãã©é¢ä¿ããããŸããã§ããããã¢ã«ãŽãªãºã å
šäœã®æ§ç¯ã«å¯Ÿããåºæ¬çãªã¢ãããŒãã«é¢ä¿ããŠããŸããã
ãã®ã³ãŒããå¥ã®ãŠãŒãã£ãªãã£ãšããŠå²ãåœãŠãŸãããããã¹ãã®åŸåã§è©³çްã«åæããŸãããåããšãåŸãã«ãªã£ãçç±ãããã³ãåŸããšããŠããã«èšè¿°ã§ããªãã£ãçç±ã§ãã ç§ã¯ãŸã ããã«ã€ããŠãã¹ãŠã奜ãã§ã¯ãããŸããïŒã¢ã«ãŽãªãºã ã®åââé¡ãšTCLã®åé¡ã®äž¡æ¹ãæ··åããŸããããšãã°ãé
åã®ä»£ããã«ãªã¹ãã䜿çšãããšïŒé«éãå®å
šãã€ããªãã®ãŒçã«æ£ç¢ºã§ããïŒïŒ
ãŠãŒãã£ãªãã£ïŒcipl.tlïŒã®ããžãã¯ã¯æ¬¡ã®ãšããã§ããã³ãã³ãã©ã€ã³ã§2ã€ã®ãã©ã¡ãŒã¿ãŒãèšå®ããŸãããªã¹ãã®äœæãéå§ããIPv4ã¢ãã¬ã¹ãšããªã¹ãã®çµäºã«äœ¿çšããIPv4ã¢ãã¬ã¹ããŸãã¯ãªã¹ãã«å«ããèŠçŽ ã®æ°ãç€ºãæ°å€ã§ãã æ§ç¯ã®é åºã¯ãäœãã¢ãã¬ã¹ïŒæåã®ãã©ã¡ãŒã¿ãŒïŒãã倧ããã¢ãã¬ã¹ãŸã§ã§ãã 2çªç®ã®ãã©ã¡ãŒã¿ãŒãçç¥ãããšãéå§IPv4ã¢ãã¬ã¹ã®ã¿ã§æ§æããããªã¹ãã衚瀺ãããŸãã
> cipl.tl 192.0.2.1 1
192.0.2.1
192.0.2.2
> cipl.tl 192.0.2.1 192.0.2.2
192.0.2.1
192.0.2.2
> cipl.tl 192.0.2.1
192.0.2.1
Windowsã®å Žåãã¹ã¯ãªããã¯tclshã€ã³ã¿ãŒããªã¿ãŒãšãšãã«èµ·åãããŸããå®éã«ã¯ã* nixã§ãå®è¡ã§ããŸãã
> tclsh cipl.tl 192.0.2.1
192.0.2.1
ããã«ãã³ãŒããåŒçšããŠãè¡çªå·ãšããŒãžã§ã³ãæäŸããã³ã¡ã³ãããŸãã çµæã®ããŒãžã§ã³ã¯ããããã¯ã®æåŸã«ãããªã³ã¯ãéžæã§ããŸãã
Verã1ãNoã1-12
æåã®è¡ã¯ã䜿çšããå¿
èŠãããã€ã³ã¿ãŒããªã¿ãŒã瀺ããŠããŸããããã¯Linuxçšã®è¡ã§ãã äžè¬ã«ãtclshãžã®ãã«ãã¹ãæå®ããå¿
èŠããããŸããããšãã°ãFreeBSDã®å Žåããã®è¡ã¯æ¬¡ã®ããã«ãªããŸãã
次ã«ãããã°ã©ã ã§ããã«äœ¿çšããæ£èŠè¡šçŸ
ã§ãã
exipããã³
exdg倿°ãèšå®ã
ãŸã ã IPv4ã¢ãã¬ã¹ãæ£ããå
¥åãããããšã確èªããã«ã¯ãæåã®å€æ°ãå¿
èŠã§ãã 1.0.0.0ãã255.255.255.255ãŸã§ã®10é²åœ¢åŒã§èšè¿°ãããæ£ããã¢ãã¬ã¹ã¯ããã®æ£èŠè¡šçŸã«è©²åœããŸããã€ãŸãã192.0.02.010ã®åœ¢åŒã®ã¢ãã¬ã¹ãèšå®ããŠãæ©èœããŸããã 2çªç®ã®å€æ°ã¯ãå
è¡ãŒããªãã§çªå·ã決å®ããŸã-ãªã¹ãã®æå¹ãªå¢çã¯0ã999999ã§ãç©ºã®æååãtrueã§ãã ç§ã®æèŠã§ã¯ã999999ãè¶
ããå¶éã¯åççã§ãããããã«ã次æ°32ã®æ°å€2ã«å¯Ÿå¿ããæ£èŠè¡šçŸãæ¢ãã®ã«æéãç¡é§ã«ããŸããã§ããããããã®æ£èŠè¡šçŸã¯ããã«ã¯è¡šç€ºãããŸããã§ãããããœãªã¥ãŒã·ã§ã³ã®ããŒãºã«åºã¥ããŠè¿œå ãããŸããããã®ãããªããããããã¯ããå°ãèŠãããŸãã
次ã«ã
ifæ¡ä»¶ããã§ãã¯ãããŸã-ã³ãã³ãã©ã€ã³ããæž¡ããããã©ã¡ãŒã¿ãŒã®æ°ã0ãããå ŽåããŸãã¯2ãè¶
ããå Žåãå°ããªãã«ãã衚瀺ãããŸãã ãã®æç¹ã§ã¯ãäœãåºåããå¿
èŠã¯ãããŸããããæåã®2ã€ã®ãã©ã¡ãŒã¿ãŒãç®çã®ãã©ã¡ãŒã¿ãŒãšããŠäœ¿çšããã ãã§ããšã©ãŒãçºçããŠãåºåãä¹±ããããšãªããŠãŒãã£ãªãã£ã®ãããæäœã«éäžã§ããŸãã
æåŸã®è¡ã¯ãã¡ã€ã³åŠçãè¡ããã
elseãããã¯ãéããŸãã
Verã1ãNoã12-17 } else { set startip [lindex $argv 0] set countip [lindex $argv 1] set getcountip $countip if {[regexp $exip $startip]} then { set octsip [split $startip {.}]
ãã®ããŒãã§ã¯ãæåã«å
¥åã§åãåã£ããã©ã¡ãŒã¿ãŒã
startip倿°ïŒæåã®ãã©ã¡ãŒã¿ãŒ
countip -2çªç®ã®ãã©ã¡ãŒã¿ãŒïŒã«
ä¿åããŸã
ã2çªç®ã®ãã©ã¡ãŒã¿ãŒããªãå Žåã
lindexã¯ç©ºã®æååãè¿ããŸãã ãŸãã2çªç®ã®ãã©ã¡ãŒã¿ãŒã远å 倿°
getcountipã«ä¿åããŸãã
次ã«ãæåã«æå®ãã
æ£èŠè¡šçŸã§regexpããã³
exip倿°ã䜿çšããŠãæåã®ãã©ã¡ãŒã¿ãŒãæ£ããIPã¢ãã¬ã¹ãšäžèŽããããšã確èªããŸãã ãã®æ¡ä»¶ã§ã¯ãIPv4ã¢ãã¬ã¹ãäºæ³ãšå®å
šã«äžèŽããŠããããšãéèŠã§ããããã¯ã
splitã䜿çšããŠ
octsipãªã¹ããäœæããæ¬¡ã®è¡ã§ããããæåãã»ãã¬ãŒã¿ãŒãšããŠæ©èœããããã§ãã çµæã®ãªã¹ãã«ã¯ã远å ã®ãã§ãã¯ãªãã§ããããæäœããããã«ãå
è¡ãŒããªãã§æ£ããå Žæã«0ãã255ãŸã§ã®10鲿°ã®ã¿ãå«ãŸããŠããå¿
èŠããããŸãã ããã§ã¯ãããšãã°ãæ°å€011ã眮æããããšã8鲿°ãšããŠèªèãããéãïŒã€ãŸãã10鲿³ã§ã¯9ã«çããïŒãå
è¡ãŒãã圹å²ãæãããŸãã
æ€çŽ¢ãšã³ãžã³ã§ã®ã¯ãšãªã¯ããããã®ãã¹ãŠã®æ¡ä»¶ããã§ãã¯ããªãæ£èŠè¡šçŸã«ã€ãªããããšãéåžžã«å€ããããå€ãã®å Žåãã°ã«ãŒãå
ã®3æ¡ã®4ã€ã®ã°ã«ãŒãããã§ãã¯ããã ãã§ãã ããšãã°ã
habrahabr.ru / blogs / webdev / 123845ã®åŒã¯ããã¡ããIPã¢ãã¬ã¹ã§ãã000.100.1.010ã®æ§ç¯ãèš±å¯ããŸããã8鲿°ãŸãã¯10鲿°ãæç¢ºã«æ±ºå®ããããã§ã¯ãªããããäžç¢ºå®æ§ãçãããããªãæ€èšŒãå¿
èŠã§ãã
Verã1ãNoã18-35 if {[regexp $exip $countip]} then { set octfip [split $countip {.}] set octsub {0} set countip {0} for {set i 3} {$i>=0} {incr i -1} { if {[set octsub [expr [lindex $octfip $i] - [lindex $octsip $i]]] < 0} then { if {$i > 0} then { set si [expr $i - 1] set octfip [lreplace $octfip $si $si [expr [lindex $octfip $si] - 1]] set octsub [expr 256 + $octsub] } else { break } } set ni [expr 3 - $i] set countip [expr $countip + ($octsub * (1 << ($ni * 8)))] } }
ããã§ã2çªç®ã®ãã©ã¡ãŒã¿ãŒãæå¹ãªIPv4ã¢ãã¬ã¹ã§ãããã©ããã確èªããããã§ããå Žåã¯ããã®ã¢ãã¬ã¹ãšæåã®ãã©ã¡ãŒã¿ãŒã§æå®ãããã¢ãã¬ã¹ãšã®å·®ãèšç®ããããšããŸããã€ãŸãããã®ãããã¯ã®åºåã§ã¯ã
countip倿°ã«ãªã¹ãé·ã®æ£ããå€ãå«ãŸããŠããå¿
èŠããããŸãã ã¢ããã¹ããªãŒã ãã§ãã¯ã«
ifæ¡ä»¶
ãçµã¿èŸŒãŸããŠããããïŒ16è¡ç®ïŒãåã®ãã§ãã¯ã倱æããïŒæåã®ãã©ã¡ãŒã¿ãŒãIPv4ã¢ãã¬ã¹ã§ã¯ãªãïŒå Žåãããã°ã©ã ã¯ãã®ã»ã¯ã·ã§ã³ã«å°éããŸããã
ãã®ãµãã¿ã¹ã¯ïŒIPv4ã¢ãã¬ã¹ã®æžç®ïŒã®è§£æ±ºçã¯ãåå
ã®2ã€ã®æ°å€ãæžç®ãããã®ããã«è¡ãããŸãã
192.168.3ã 1
-192.168.2ã 10
= 0. 0.0.247
ãã¡ããããããã®æ°å€ã¯10鲿°ã§ã¯ãããŸãããã256ã«åºã¥ããŠããŸããã€ãŸããåã®æ°åã®å€ã䜿çšããå Žåããªã¯ãããã®16é²è¡šèšã§10ã§ã¯ãªã256ïŒ0x100ïŒã远å ããå¿
èŠããããŸãã
0xC0.0xA8.0x03.0x01
-0xC0.0xA8.0x02.0x0A
----------------------ïŒããŒã³ãå®è¡ããäžçŽã¬ãã«ãããŠããããåé€ããŸãïŒ
= 0xC0.0xA8.0x03.0x01
-.0x01
----------------------ïŒããŒã³ãç¶ç¶ããçµæãæ°å€ã·ã¹ãã ã®ããŒã¹ã®å€ã§èª¿æŽããŸãïŒ
-0xC0.0xA8.0x02.0x00A
+ .0x100
----------------------ïŒçµæã¯ãã®ãããªæäœã§ãïŒ
= 0xC0.0xA8.0x02.0x101
-0xC0.0xA8.0x02.0x00A
= 0x00.0x00.0x00.0x0F7
ãããå®è£
ããã«ã¯ãæåã®ãã©ã¡ãŒã¿ãŒãšåæ§ã«ã
otcfipãªã¹ããäœæããŠããããªã¯ããããš
ãŒãã®éããå«ã
octsub倿°ãäœæããŸã
ãcountipã¯ãå
¥åããIPv4ã¢ãã¬ã¹ã§ã¯ãªããã¢ãã¬ã¹ãªã¹ãã®ãµã€ãºãæ ŒçŽããŸããã®ã³ãŒããããã¯ã
3ã0ã®éé ã§å€æ°
iã䜿çšããŠ
forã«ãŒããç·šæ
ããŸãããã®ã«ãŒãã§ã¯ãIPv4ã¢ãã¬ã¹ã®ãã¹ãŠã®ãªã¯ããããæäžäœããéå§ãã
å¿
èŠããã
ãŸã ã
ã€ãŸã ã
octsipããã³
octfipãªã¹ãã®ãã¹ãŠã®èŠçŽ ãæåŸã®èŠçŽ ããéå§ã
ãŸã ã
çŸåšã®ãªã¯ããã
octfip-octcipã®å·®ãèšç®ãã
octsubã«ä¿åã
ãŸã ã ããã§é
åã䜿çšãããã£ãã®ã¯ã
lindexã䜿çšããæ§ç¯
ãéåžžã«é¢åã§ããããã§ããããªã¹ãããé
åïŒTCLã§ã¯çµåã®ã¿ïŒã圢æããç°¡åãªæ¹æ³ãèŠåœãããããªã¹ãã®ã¿ãã©ãã«ã§ããããŸãã èšç®ãããå·®ã¯ã0æªæºã®æ¡ä»¶ã§ããã«ãã§ãã¯ãããŸããã€ãŸããé«ãªã¯ãããããããŒã³ãäœæããå¿
èŠããããã©ããã
èè³ãè¡ãå¿
èŠãããããããæãå€ããªã¯ãããã§ã¯ãªãå ŽåïŒ
i㯠0ãã倧ããïŒã256ãå·®
octsubã«è¿œå ãããã¯ãªã¡ã³ããããïŒ
octfip ïŒã®æ¬¡ã®ãªã¯ããããã1ãåŒããŸãã
ãããæãå€ããªã¯ãããã§ããå Žåãæžå°ãã
octfipã¯æžç®ããã
octsipããå°ãã ãã€ãŸããå·®ã¯è² ã§ããããšã倿ããŸããããã¯åé¡ã®æ¡ä»¶ã«ãããã®ã§ã¯ãªãããã®å Žåã¯ã«ãŒããçµäºããŸã
-breakããªããèè³ãããå¿
èŠããªãå Žåãçµæã¯ç§ãã¡ãæºè¶³ãããŸãã ãã ããçµæã¯ãããã®å Žåã256ãåºæ°ãšããæ°å€ã·ã¹ãã ã§è¡šç€ºãããŸããããã¯ãã€ã³ã¿ãŒããªã¿ãŒãçè§£ããã·ã¹ãã ã§ããã«èšç®ãè¡ãå¿
èŠãããããã䟿å©ã§ã¯ãããŸããã ãããã£ãŠãçµæã®çµæãäœçœ®çªå·ã·ã¹ãã ã®æšæºçãªæ¹æ³ã§å€æããŸãã
... + A i * B i ... + A 3 * B 3 + A 2 * B 2 + A 1 * B 1 + A 0 * B 0 = N B ãããã§Bã¯çªå·äœç³»ã®åºæ°ã§ãã
ç§ãã¡ã®å ŽåïŒ
countip = octsub ni * 256 ni ãããã§
niã¯0ãã3ãŸã§ããŸãã¯
ni = 3-
i ãããã§
iã¯3ãã0ã«å€ãããŸããããã«ãããæ¢åã®ãµã€ã¯ã«ã«å€æãå«ããããšãã§ããŸãã æ°å€ã·ã¹ãã ã®åºæ°ã¯2ã®åæ°ã§ãããããæ¬¡æ°ãèšç®ããããã«ã8ã®åæ°ã®ã·ããã䜿çšããŸããããã¯ã256ããã€ããªè¡šçŸã§100000000ã§ããããã§ããã€ãŸãããŠãããã¯å·Šã«8ãããã·ãããããŸãã ãããã£ãŠãæåã«0ãæ¬¡ã«8ïŒã³ãŒãã®ãã®ã»ã¯ã·ã§ã³ã®æåŸã®æå¹ãªè¡ïŒã次ã«16ããã³24ãã€ã·ããããŠã1ïŒ256
0 ïŒã256ã256
2ããã³256
3ãä¹ç®ããŸãã
ãã®ãµã€ãã«2床ç®ã«æ»ã£ããšããããã¯å®è£
äžã«åçŽã§çè§£ããããããã«æãããåœæãåŒãèµ·ãããŸããããä»ã§ã¯äžå¿
èŠã«æ··ä¹±ãè€éã«ãªã£ãŠããŸãã ããã¯ããã®ã³ãŒãã説æããããã¹ãã®éã«ãã£ãŠã倿ã§ããŸãã
äœãæªãã®ïŒ ãªããåã³ïŒãæžç®ãè¡ãå¿
èŠããã£ãã®ã§ããïŒåºæ°ã256ã®æ°å€ã·ã¹ãã ã§ã¯ãããããããã®å€ãããã°ã©ãã³ã°èšèªãçè§£ã§ããæ°å€åœ¢åŒã«å€æããç¹ã«ç¿»èš³ãè¡ãããã«æšæºçãªææ®µã䜿çšããŠæžç®ãã代ããã«ã çµå±ãç§ã«ãšã£ãŠã¯ã人éã®äž»èгçãªèªèãåã³æ®é
·ãªåè«ãæŒãããšããçµè«ã«éããŸããã æåã®ã¯ã©ã¹ã§è¡ãããåã®ã¢ã¯ã·ã§ã³ãå®è¡ãããããç°¡åãªããšã¯äœã§ããïŒ äœããªããããã¯å®éã®æ°åã®åŸã«èª°ããæåã«æããããããã ã 翻蚳ãã·ããã¯ãæåã®ã¯ã©ã¹ã®æãåçŽãªæäœãšæ¯èŒããŠãè€éã«èŠããŸãã ããã10鲿°ã·ã¹ãã ã§ã¯ãªãããšãçè§£ããã®ã¯å°ãåŸã«ãªããŸãããèšè¿°ãããã³ãŒããããäžåºŠèŠãªããã°ãªããªãã£ããšãã«ã®ã¿äœãèµ·ãã£ãŠããã®ããçè§£ããããšã§ãã ãã®çµæãåããµã€ãã®2çªç®ã®ããŒãžã§ã³ã
Ver.2ãNo.18-25 if {[regexp $exip $countip]} then { set octfip [split $countip {.}] set nfip [expr ([lindex $octfip 0] * 0x1000000) + ([lindex $octfip 1] * 0x10000)\ + ([lindex $octfip 2] * 0x100) + ([lindex $octfip 3])] set nsip [expr ([lindex $octsip 0] * 0x1000000) + ([lindex $octsip 1] * 0x10000)\ + ([lindex $octsip 2] * 0x100) + ([lindex $octsip 3])] if {$nfip >= $nsip} then {set countip [expr $nfip - $nsip]} }
ïŒæåã®ããŒãžã§ã³ã®ããã«ïŒ
octfipãªã¹ããäœæããåŸã2çªç®ã®åŒæ°ã®ã¢ãã¬ã¹ã®
nfip倿°ãš1çªç®ã®åŒæ°ã®ã¢ãã¬ã¹ã®
nsip倿°ã«ãIPv4ã¢ãã¬ã¹å€ã«å¯Ÿå¿ããçªå·ãäœæããŸãã ãµã€ã¯ã«ãªãã§å€æãè¡ããå€ã1è¡ã«çœ®ãæããŸãïŒ
nfip = listitem 0 * 256 3 + listitem 1 * 256 2 + listitem 2 * 256 + listitem 3 ãããã§
listitem nã¯å¯Ÿå¿ãããªã¹ãèŠçŽ ã§ã
lindexã䜿çšããŠåŒã§çŽæ¥ã ã³ãŒãã®256ã¯ãããããããããããã«ã16鲿°å€0x100xxxxã®åœ¢åŒã§ããçšåºŠè¡šçŸãããŠããŸãã æ¬¡ã«ã2çªç®ã®åŒæ°ãæåã®åŒæ°ããã倧ããããšã確èªããæåã®åŒæ°ã2çªç®ã®åŒæ°ããæžç®ããŠãçµæã®å€ã
countipã«ä¿åããŸãã
ãã®çµæã以åãããå°ãç°¡åã«ãªããããã«ç°¡åã«ãªããŸããã ãã®ãªãã·ã§ã³ã«
æ©ãŸãããã®ã¯ã
exprèšç®ã§
nfip倿°ãš
nsip倿°ããªãŒããŒãããŒããå¯èœæ§ãããããšã ãã§ãã çŸåšã®Cã³ã³ãã€ã©ã®å Žåãããã¯æãããããšã§ã¯ãããŸããã èšç®ããã³ãªãŒããŒãããŒã«é¢ããããã¥ã¡ã³ã
http://www.tcl.tk/man/tcl8.5/TclCmd/expr.htm#M23ãã ã ããŒãžã§ã³8.4
www.tcl.tk/man/tcl8.4/TclCmd/expr.htm#M5ã®å Žå ãæ°å€å®æ°ã¯32ãããã®ç¬Šå·ä»ãæ°å€ã§ãã
ããšãæç€ºçã«è¿°ã¹ãããŠããããã®èšè¿°ã®ããŒãžã§ã³8.5ã§ã¯ãå¿
èŠã«å¿ããŠ64ãããã®ç¬Šå·ä»ãæ°å€ãšããŠè§£éãããŸããã åã®ããŒãžã§ã³ã§ã¯ããªãŒããŒãããŒã®ä»®æ³çãªå¯èœæ§ãååšããŠããŸãããããã§ã«ååŸããå·®ãåŠçããŸããããå®éã®å Žåã¯16ãããæ°ãããã¯ããã«å°ãããªããŸãã
次ã«ããŠãŒãã£ãªãã£ã®2çªç®ã®éšåãéå§ãããIPv4ã¢ãã¬ã¹ã®åºåãªã¹ãã圢æãããŸãã
Ver.2ãNo.26-27 if {[regexp $exdg $countip]} then { puts $startip
countip倿°ã
0ã999999ã®æ°å€ã«æºæ ããŠãããã©ããã確èªããŸãããã®å€æ°ã®å€ã¯ã2çªç®ã®åŒæ°ã§æž¡ãããšãã§ããŸããã€ãŸããIPv4ã¢ãã¬ã¹ã«å±ããŠãããã©ããã®ä»¥åã®ç¢ºèªã«å€±æããŸããã ãŸãã¯ãåŒæ°ã§æå®ãããã¢ãã¬ã¹éã§ãã§ã«èšç®ãããå·®ã ãã®å€æ°ã®å€ã倧ããããå ŽåããŸãã¯æ°å€ã«ãŸã£ãã察å¿ããŠããªãå ŽåïŒããšãã°ãIPv4ã¢ãã¬ã¹ã®å·®ãè² ã®å Žåãããã¯èšç®åŸã®å¯èœæ§ããããŸãïŒããã以éã®åŠçã¯å®è¡ãããŸããã ãã¹ãŠãæ£åžžãªå Žåããªã¹ãã®æåã®èŠçŽ ïŒæåã®åŒæ°ã§æå®ãããIPv4ã¢ãã¬ã¹ïŒã衚瀺ããŸãã ããã«ãIPv4ã¢ãã¬ã¹ã®çµæãªã¹ããã·ãŒã±ã³ã¹ãšåŒã³ãTCLã®å
éšæŠå¿µã§ãããªã¹ããšæ··åããªãããã«ããŸãã
Ver.2ãNo.28-29 for {set i 0} {$i<$countip} {incr i 1} { set octsip [lreplace $octsip {3} {3} [expr [lindex $octsip {3}] + 1]]
ç®çã®ã·ãŒã±ã³ã¹ã®æ®ãã®èŠçŽ ã圢æããŸããããã¯ãé
åã䜿çšãããã®ã§ããããªã¹ãããé
åãžã®å€æã¯ããã®åœ¢åŒã®ãªã¹ãã䜿çšãããããæªãããã§ãïŒãããæ£ããç°¡åã«è¡ãã«ã¯ã©ãããã°ããã§ããïŒïŒã 0ãã
countipã·ãŒã±ã³ã¹ã®èšç®ãããïŒãŸãã¯æå®ãããïŒæå€§èŠçŽ ãŸã§ã®å€ãå®è¡
ãã倿°
iã® forã«ãŒã
ãæ¬¡ã«
瀺ããŸãã ã«ãŒãå
ã§ã¯ã以åã«åœ¢æããã
octsipãªã¹ãã®æåŸã®èŠçŽ ïŒã¢ãã¬ã¹ã®æäžäœã®ãªã¯ãããïŒã1å¢å ããŸã...
Ver.2ãNo.30-36 for {set j 3} {$j>=0} {incr j -1} { if {[lindex $octsip $j] > 255 && $j > 0} then { set sj [expr $j - 1] set octsip [lreplace $octsip $j $j {0}] set octsip [lreplace $octsip $sj $sj [expr [lindex $octsip $sj] + 1]] } }
...ãããŠãä»ã®ã«ããŽãªã調æŽããå¿
èŠããããã©ããã確èªããŸãã ãã®
ãã ã倿°
jã®å®è¡å€ã3ãã0ã®
forã«ãŒããç·šæããŸããæ¬¡ã«ãifæ¡ä»¶ã§ãçŸåšã®ãªã¯ãããã255ãè¶
ããŠããïŒãªãŒããŒãããŒãçºçããŠããïŒããšã確èªããŸããããã¯0ãè¶
ããªãã0ã§ã¯ãªãæé«ãªã¯ããã
jã§ãã ãçŸåšã®ãªã¯ãããã¯ãŒãã«ãªããé«ãªã¯ãããïŒå
é ã«è¿ã
ãªã¯ã·ãããªã¹ã
é
ç®ã«å¯Ÿå¿ïŒã§1ã远å ããŸããé«ãªã¯ãããã§ãªãŒããŒãããŒãçºçããå ŽåãIPv4ã¢ãã¬ã¹ãééã£ãŠããããã«èª¿æŽããŸããã
Ver.2ãNoã37-44 set oip [join $octsip {.}] if {[regexp $exip $oip]} then { puts $oip } else { puts ": " exit 3 } }
ã¢ãã¬ã¹ã®ãªã¯ããããå«ãçµæãªã¹ããããŒãžããã»ãã¬ãŒã¿ã
ããªãªãã§ããoip倿°ã«
çµåããŸãã æ¬¡ã«ãæåã«æå®ããæ£èŠè¡šçŸã䜿çšããŠãIPv4ã¢ãã¬ã¹ã«å±ããçµæã確èªããŸãã ãã¹ãŠãæ£ããå Žå-æ£ãããªãå ŽåããªãŒããŒãããŒãçºçããããå¥ã®ãšã©ãŒããã§ã«ã·ãŒã±ã³ã¹ã®åœ¢æããã»ã¹ã«ãããšæšæž¬ããexit
exit emergencyãçµäºã
ãŸã ã ãŸãããã®æç¹ã¯å®å
šã«çŸããããã§ã¯ãããŸãããè€æ°ã®çµäºãã€ã³ãããããããããšãã°ãæåŸã«åãã¢ã¯ã·ã§ã³ãå®è¡ãããå Žåã«äžäŸ¿ã«ãªãå¯èœæ§ããããŸãã
æåŸã®éãæ¬åŒ§ã¯
forã«ãŒãã®çµããã§ããããã¯åºåã·ãŒã±ã³ã¹ã圢æãã28è¡ç®ã§éããŸãã
Verã2ãNoã45-51 } else { puts " \"$getcountip\"" } } else { puts " IP \"$startip\"" } }
26è¡ãš16è¡ã®æ¡ä»¶ã§
elseãã©ã³ãã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããæåŸã®è¡ã§ã¯ãããã°ã©ã ã®èµ·åæã«æå®ãããåŒæ°ãæåŸ
ã©ãããã©ããã確èªããŸãã ããã¯
getcountip倿°ã
䜿çšãããå¯äžã®å Žæã§ãããããã°ã©ã ã®2çªç®ã«åãåã£ãåŒæ°ã倿ŽãããŠããªã圢åŒã§æ ŒçŽããŸããããã¯å¥åŠã§ããéããšæãããŸããããã®å ŽåãæçœãªïŒåçŽãªïŒä»ã®ãªãã·ã§ã³ãå®è£
ããããšã¯äžå¯èœã§ããã
ããã°ã©ã ã®ãã®éšåãããäžåºŠèŠãŠïŒåºåã®ã·ãŒã±ã³ã¹ã圢æãããïŒãæåã«ãããŒã¹ãã³ããŒã·ã¹ãã 256ã«4æ¡ã®æ°åã®å
šå ç®åšãšãåãæ°åã®è¿œå ã³ãŒãã«ãã©ã³ã¹ã¬ãŒã¿ãŒãå®è£
ãããšãããšæããŸããåãå ç®åšã§ã®æžç®ã æåã®éšåã¯ãŸã 倿ŽããŠããããåã®èšç®ã®åçŽãã«ã€ããŠã®ã¢ã€ãã¢ã«æ¯é
ãããŠããŸããã ãã®ïŒéçã®ïŒãã³ãã£ãŒãå®è£
ããããšãã顿ã¯ãããèªäœã¯è峿·±ããã®ã§ããããå€åTCLã§ã¯å®çŸããªãã£ããããæåããŸããã§ããã 2çªç®ã®éšåãæåã®éšåãšåãããã«ãã€ãŸãéåžžã®è¡šçŸããå¿
èŠãªãã®ã«å€æããããã«å€æŽããå¿
èŠãããããšã¯æ¢ã«æããã§ããïŒããã¯æ¢ã«256æ¡ã®æ°å€ã·ã¹ãã ãžã®å€æã§ãïŒã
forã«ãŒãã§èšèªææ®µã䜿çšããŠIPv4ã¢ãã¬ã¹ãå埩åŠçã§ããå Žåã¯ãåæã®æŠå¿µã倿ŽãããŠ
ããŸãããã®ã·ãŒã±ã³ã¹ã®ãµã€ãºãäºåã«èšç®ããªãã®ã§ããã°ãåçŽã«è¡ã®ã¢ãã¬ã¹ããå¥ã®ã¢ãã¬ã¹ã«ç§»åããŸãã ãŸãããã®ã¢ãããŒãã§ã¯ãå°ããæ¹ãã倧ããæ¹ãžã ãã§ãªãå察æ¹åã«ãç§»åããã®ã¯éåžžã«ç°¡åã§ããããšã倿ããŸãã-ããã¯è¿œå ã®åªåãå¿
èŠãšããããã®åœ¢æäžã«ã«ãŒã倿°ã®å¢åãæ£ããèšå®ããå¿
èŠããããŸãïŒããã§è¿œå ã®æ©èœãå¯èœã§ãä»»æã®æ¹åã®ã·ãŒã±ã³ã¹ã圢æããŸãïŒã
Ver.3ãNo.31-32 if {$nfip > $minip && $nfip < $maxip} then { if {[set d [expr $nfip >= $nsip]]} then {set di {1}} else {set di {-1}}
nfipã®æææš©ã確èªããŸã
ãnfipã«ã¯ã2çªç®ã®åŒæ°IPv4ã¢ãã¬ã¹ãç¯å²ã«æå®ãããçªå·ãšããŠå«ãŸããŠããŸãïŒ
minipãš
maxipã¯ããã°ã©ã ã®éå§æã«æ±ºå®ãããŸãïŒã ç¯å²å
ã«åãŸãå Žåã2çªç®ã®IPv4ã¢ãã¬ã¹
nfipãæåã®
nsipããã倧ããå ŽåïŒã¢ãã¬ã¹ã¯ãã§ã«æ°åã®åœ¢åŒã«ãªã£ãŠããïŒãç¹°ãè¿ãã®æ¹åãèšå®ããçŽæ¥é åºã®ç¹°ãè¿ãã¯å€æ°
di = 1ãããããå°ããå Žåãéã®é åºã®ç¹°ãè¿ãã
di = -1ã æ¯èŒã®çµæã
dã«èšæ¶ãããŸãã
Ver.3ãNoã33-37 for {set i $nsip} {($i<=$nfip && $d) || ($i>=$nfip && !$d)} {incr i $di} { set octip [list [expr ($i & 0xFF000000) >> 24] [expr ($i & 0xFF0000) >> 16]\ [expr ($i & 0xFF00) >> 8] [expr ($i & 0xFF)]] puts [join $octip {.}] }
åæå€ã
nsipã«èšå®ãããŠãã倿°
iã§
forã«ãŒããæŽçããçµäºæ¡ä»¶ãæ¡ä»¶
nfip> = nsipã§èª¿æŽããŸããçµæã¯
d ïŒ
i <= nfipã§ ãäžãã
nfipã«è¿ã¥ãå ŽåããŸãã¯
i> = nfipã«æ ŒçŽããŸãã å¢å
iã¯ãã§ã«èšç®ããã
diã«æ ŒçŽãããŠããŸãã
ã«ãŒãã®æ¬äœã§ã¯ãIPv4ã¢ãã¬ã¹ã®ãªã¯ãããã®ãªã¯
ããããªã¹ããäœæããŸãã ã€ãŸããã¢ãã¬ã¹ããã®æ°å€è¡šçŸãã10é²è¡šèšã§åœ¢æããå¿
èŠããããŸã-256 10鲿°ã·ã¹ãã ã«å€æããŸãã äžè¬çãªå Žåãçè«ã«åŸã£ãŠãå¥ã®çªå·ã·ã¹ãã ã«åºã¥ããŠã1ã€ã®çªå·ã·ã¹ãã ã«çªå·ãåå²ããå¿
èŠããããŸãããŸããæ®åºããæ°ããçªå·ã·ã¹ãã ã«çªå·ã圢æããŸãïŒããã«åºã¥ããŠåå²ããŸãïŒã
3 221 225 985 | 256
-3 221 225 984 | -----------
-------------- | 12,582,914 | 256
1 | -12,582,912 | -------
---------- | 49 152 | 256
2 | -49 152 | ---
0 | 192
çµæ192ããéå§ããŠã0ã2ã1ã®éé ã®ãã¹ãŠã®æ®åºã«å¯ŸããŠ192.0.2.1ãåŸãããŸãã é€ç®ã¯è€éãªæäœã§ãããæé©åã¯è¡ãããŸããããéåžžã«ç¹æ®ãªã±ãŒã¹ã§ã¯ãIPv4ã¢ãã¬ã¹ãš256ã«ããé€ç®-ãã¹ãŠãéåžžã«åçŽã«ãªããŸãã 8ã§ã·ãããïŒ256ã®çޝä¹ã§é€ç®ïŒãäžèŠãªãããããã¹ã¯ããŸãïŒ2é
æŒç®ãANDãïŒã 16é²åœ¢åŒã§æ³åããŠãã ããã
0xC0000201 | 0xC0000201 | 0xC0000201 | 0xC0000201
ïŒ0xFF000000 | ïŒ0x00FF0000 | ïŒ0x0000FF00 | ïŒ0x000000FF
-------------------------------------------------- -------------------
0xC0000000 >> 24 | 0x00000000 >> 16 | 0x00000200 >> 8 | 0x00000001
-------------------------------------------------- -------------------
= 0xC0ïŒ192ïŒ| = 0x00ïŒ0ïŒ| = 0x02ïŒ2ïŒ| = 0x01ïŒ1ïŒ
ããã¯ãã¹ãŠ1è¡ã§è¡ãããåãããã¯ç¬èªã®ãªã¹ãèŠçŽ
listã«é
眮ãã
ãŸã ã ã«ãŒãã®æ¬æã®2çªç®ã®ã¹ããŒãã¡ã³ãã¯ãçµåããããªã¹ãã衚瀺ããŸãã
Ver.3ãNoã38-45 } else { puts " IP " exit 3 } } else { puts " IP \"$startip\"" } }
æåŸã®è¡ã¯ã»ãšãã©å€ãããŸãããããã«ã2çªç®ã®åŒæ°ãèšå®ããéã®ãšã©ãŒã«é¢ããçµè«ã¯ãããã°ã©ã å
ã§ãããã«é«ãã·ããããŸãã ããã°ã©ã ã®æåã®éšåã¯ã2çªç®ã®ãªãã·ã§ã³ãšæ¯èŒããŠå°ã倿ŽãããŠããŸãã
Ver.3ãNoã1-7
æ°å€ãã©ã¡ãŒã¿ãŒããã§ãã¯ããããã®æ£èŠè¡šçŸã¯ãä»»æã®é·ãã®æ°å€ã«å¯ŸããŠæ£ã®çããè¿ãããã«ãªããŸãããå
é ã«0ã¯ãããŸããããè² ç¬Šå·ã-ããåã«ä»ããŠããŸãã ããã§ã¯ã次ã®å€æ°
maxipããã³
minipã䜿çšããŠãçµæã®ã·ãŒã±ã³ã¹ã®é·ããæ°å€åœ¢åŒã§ãã§ãã¯ãããããããã§ãã¯ãç°¡ç¥åããå¢çãæ¡åŒµã
ãŸãã ã
ãããã®å€ã¯ãexipæ£èŠè¡šçŸãè€è£œããŸãããããã¯ãèšç®çµæã§ã¯ãªãããŠãŒã¶ãŒå
¥åã®æ£ç¢ºæ§ã®ã¿ããã§ãã¯ããããã«ãªã£ãããã§ããVer.3ãNo.15-20 set startip [lindex $argv 0] if {![string length [set finiship [lindex $argv 1]]]} then {set finiship {0}} if {[regexp $exip $startip]} then { set octsip [split $startip {.}] set nsip [expr ([lindex $octsip 0] * 0x1000000) + ([lindex $octsip 1] * 0x10000)\ + ([lindex $octsip 2] * 0x100) + ([lindex $octsip 3])]
è¡8ã14ã¯ãæåã®ãªãã·ã§ã³ã®è¡6ã12ãã»ãŒå®å
šã«ç¹°ãè¿ããŸãããæ°ããæ©èœã«å¿ããŠã¡ãã»ãŒãžããããã«ä¿®æ£ããŸãããæ¬¡ã«ã2çªç®ã®ãªãã·ã§ã³ãšã»ãŒåãã¢ã¯ã·ã§ã³ãå®è¡ããŸãã2çªç®ã®åŒæ°ãæå®ãããŠããªãå Žåã倿°ãåžžã«å®çŸ©ãããããã«ãfinishipå€ã匷å¶çã«0ã«èšå®ããå¯äžã®ãã®ã§ããfinishipã¯2çªç®ã®ãªãã·ã§ã³ã®countipãšåãæå³ãæã¡ãæ°ããæŠå¿µã«åãããŠååã倿ŽãããŸãããæçµçã«ããã®å€æ°ã«ã¯IPv4ã¢ãã¬ã¹ã®ã·ãŒã±ã³ã¹ã®ãµã€ãºã¯å«ãŸããŸãããããã®ã·ãŒã±ã³ã¹ã®æåŸã®ã¢ãã¬ã¹ãå«ãŸããŸããæåã®åŒæ°ãæ§æèŠçŽ ã«åè§£ããçŽåŸã«nsipãèšç®ããŸããVer.3ãNo.21-30 if {[regexp $exip $finiship]} then { set octfip [split $finiship {.}] set nfip [expr ([lindex $octfip 0] * 0x1000000) + ([lindex $octfip 1] * 0x10000)\ + ([lindex $octfip 2] * 0x100) + ([lindex $octfip 3])] } elseif {[regexp $exdg $finiship] && [expr abs($finiship)] < $maxip} then { set nfip [expr $nsip + $finiship] } else { puts " \"$finiship\"" exit 5 }
æåã®æ¡ä»¶ã¯ã2çªç®ã®ãªãã·ã§ã³ãšåãã§ããåè¿°ã®å€æŽ-æåã®åŒæ°ã®èšç®ãã³ãŒãå
ã§å°ãé«ããªããŸããã2çªç®ã®elseifæ¡ä»¶ã¯ã2çªç®ã®åŒæ°ãæ°å€ã«æºæ ããŠãããã©ããããã§ãã¯ããããšã§ãããã®ãã§ãã¯ã¯ãæåã®å Žåã®ããã«ãããã®å Žåãå®è¡ãããŸããããã ãã2çªç®ã®åŒæ°ãIPv4ã¢ãã¬ã¹ã§ãªãå Žåã®ã¿ã§ããæ°å€ã®å Žåãnfipã¯ããã®æ°å€ãšnsipãåèšããŠèšç®ãããŸããåä¿¡ããIPv4ã¢ãã¬ã¹ã®æ£åœæ§ã®æ€èšŒã¯ãã³ãŒãã®ããã«äžã§æ°å€çã«è¡ãããŸãïŒäžèšã®ãšããïŒã2çªç®ã®åŒæ°ãçªå·ã«ãIPv4ã¢ãã¬ã¹ã«ãäžèŽããªãå Žåãexitãäžæ¢ããŸããç¹°ãè¿ããŸããã倿°ã®åºå£ç¹ãååŸããŸããããã®ããŒãžã§ã³ã§ã¯3ã€ã®åºå£ç¹ããããŸããããã䜿çšãããšãç¡éã«ãŒãã«ããã°ã©ã å
šäœãå
ãããšã§å
æããå¿
èŠã§ããã°ã圌ã®äžæã§ããäŒæ©ãããã°ã©ã ã®æåŸã«ãªã£ãŠãããã絶察çã«å¿
èŠã¯ãããŸããã§ããããããŸããåè¿°ã®ããã«ããã¹ãŠã®ãšã©ãŒãã§ãã¯ã¯ãããã©ã«ãã¢ã¯ã·ã§ã³ã«çœ®ãæããããšã§é€å€ã§ããŸããããã¯ãã³ãã³ãã¢ãŒãã«ããé©ããŠããŸãããã®ãªãã·ã§ã³ã§ã¯ãgetcountip倿°ã¯ãããŸããããšã©ãŒã¡ãã»ãŒãžã«ã¯çŽæ¥åä¿¡ãã2çªç®ã®finishipåŒæ°ãå«ãŸããŸããããã¯å€æŽãããªããããäœæ¥äžã«ã®ã¿äœ¿çšãããããã§ãããŠãŒãã£ãªãã£ïŒcipl.tlïŒã®ããžãã¯ãæ¡åŒµãããéå§ããIPv4ã¢ãã¬ã¹ã¯çµäºããIPv4ã¢ãã¬ã¹ãããå°ããããå¿
èŠããªããªãããªã¹ãã¯æåãã2çªç®ãŸã§äœæãããŸãã2çªç®ã®ãã©ã¡ãŒã¿ãŒãè² ã®æ°ã«èšå®ããããšãã§ããŸãããã®å Žåããªã¹ãã¯éã®é åºã«ãªããŸãã> cipl.tl 192.0.2.1 -1
192.0.2.1
192.0.2.0
> cipl.tl 192.0.2.1 192.0.2.0
192.0.2.1
192.0.2.0
ããã¯ãã¹ãŠã®äžéã§ããã説æã¯ã³ãŒãèªäœã倧ããäžåããå
ã®Varantã®ç¶æ³å
šäœã¯ãããã¯habrahabr.ru/blogs/complete_code/135340ã®ç¢ºèªã§ãããæçµçã«ã¯ã7åæž¬å®ããŠ1åã«ããããšããããã«ãããã»ã©æªãã¯ãããŸããã§ããããã©ã¹å®çšãŠãŒãã£ãªãã£ãå®å
šãªããã°ã©ã ã§ã®ãªãã·ã§ã³ïŒcipl.zipåºæ°ã«ã€ããŠã¯ããŠã£ãããã¯ã¹ã§èªãããšãã§ããŸã- ru.wikibooks.org/wiki/Sistemy_schisleniyaããªãã¯TCLã«ã€ããŠç¥ãå¿
èŠããããã¹ãŠã¯äžã§www.tcl.tk/docãšwiki.tcl.tk