moperaデザリングWifiで、iPad miniで
やってます。
GPSないと辛いね。
GPS探しにいくたびに、接続キャンセルして
繋ぎ直さないとゲームが止まっちゃう。
やっと、レベル10です。

{221ED072-058C-4C7D-9E4A-4FABA1139743}







思ったより快適、ま、しばらくこのまま使おう。
メニューは探しにくくなったけど、アプリの動作がきびきびした気がする。

VMware Player は、削除&インストールしないとネットワーク設定が壊れたけどね。
ユーザさんも、どんどんWindows10 になるだろうから慣れておかないと。

ATOK10 が使えなくなったのが悲しいけど5年つかったからいいか(笑)
他は、問題なく、Windows7 の時と同じく使えています。

パフォーマンス


BIOS 画面もでなくなって、起動しなくなってしまった。。。

Core2Quad ... 10年闘ってくれたから仕方ないかな。。。

ということで、Core i5 のマザーボードとメモリ4G買ってきて入れ替えました。

2万5千円の出費。。。痛すぎる。。゛(ノ><)ノ ヒィ

ま、でも、仕方ないからあきらめます。メモリは使い回したかったけど使えないのね。。。

Core2Quad で入れた Windows7 Pro が起動しなくてクリーンインストールしなおして

環境復旧。。。いろいろ入ってるから、なかなか戻すの大変です。。。まだまだかかります。

とりあえず、ネットワーク通信環境だけ復旧しました。

Site To Site の VPN 接続設定です。
グーグル先生に聞いても適当なのがなかったので、いろいろ試してみました。
仮想ゲートウエイを動的ルーティングにした場合は、IKE Ver 2 プロトコルになると
いうのが分かったので、それを設定してみました。

取りあえず繋がりました。YAMAHA が公式設定を公開するまでは、これで凌ぎます。
というか、繋がれば正義ですよね(*´艸`)

VPNトンネル以外の設定は、YAMAHAが公開している、静的ルーティングの設定を使用してください。

tunnel select 1
tunnel name bgrouter
ipsec tunnel 1
ipsec sa policy 1 1 esp anti-replay-check=off
ipsec ike version 1 2
ipsec ike keepalive log 1 off
ipsec ike keepalive use 1 on dpd
ipsec ike local name 1 ipv4-addr
ipsec ike nat-traversal 1 on
ipsec ike payload type 1 2 2
ipsec ike pre-shared-key 1 text <共有キー>
ipsec ike remote name 1 <仮想ゲートウエイIPアドレス? ipv4-addr
ip tunnel tcp mss limit 1350
tunnel enable 1
お持ち帰りお仕事。。゛(ノ><)ノ ヒィ

やっと、終わった…お休みは明日だけ?ヽ( ^^)ノヽ(^ ) ヽ(^^ )^-^)ノ

でも、サービス残業じゃないよ。

もともと残業つかない給料体系なのさ…報酬は十分もらってます。

ま、オレの場合は、仕事がライフワークだから、やってて楽しいけど、

仕事が嫌いな人には苦痛かも知れないね(笑)

そういう人は、こんな社員契約しないだろうしね。

好きなことが仕事だと疲れたとかないから平気ヾ(^-^)ゞヾ(._.)〃ヾ(^0^)ゞヾ(._.)〃

たまに、充電期間が欲しくなるともらうしね。

最近は、アイドルさんをおっかけるのやめて、自分の足跡を残そうとしてます。

…歳だな(笑)

十分遊んだからρ(*^_^*)ρシャカシャカ ρ(^o^)ρツクチャカ

ま、でも、応援してる子のイベントと、充電期間が合ったら、イベントへいくと思う(*´艸`)

最近は、機会がないなぁ(^^ゞ

NMB48 のシアター公演も応募をするのを忘れる始末…大人としては健全?…あはは

C言語原人の、興味の PowerShell コーディングですので、ちゃんと
したコーディングは余所で学んでね。

今まで公開してきたコードを、関数を使って、さらにメンテしやすく
してみました。(コードのコンパクト化)
また、いらない処理を省いたり、冗長なとこを修正したりもしてます。

Telnetセッション開始から、ネゴ終了まで関数にまとめてみましたが
PowerShell の変数って独特な有効範囲ですね。

PowerShell のターミナルウインドウを閉じるまでは、処理系も変数も
有効なんですね。すべてグローバル変数になっちゃう PHP と似た感じ
ですね。

{} 括り内は、その範囲で有効ですけど、try {} での宣言は全体ですね。

便宜上、関数を使えるけど、内部解釈では関数スタックではなくて、
一連の処理になるんですね。

引数をいっぱい書かなくて良くて便利ですけど、落とし穴に注意ですね。




## telnet-robot.ps1
##
## telnet プロトコルでサーバに接続してコマンドを実行する。
##
## 引数: remoteHost ホスト名
## port 接続ポート
## cmdfile リモートホストで実行するコマンドリスト
## logfile 実行ログを保存するファイル名
## user ユーザ名
## passwd パスワード
param(
[string] $remoteHost = "ukikusa",
[int] $port = 23,
[string] $cmdfile = "c:\users\kotora\com.txt",
[string] $logfile = "c:\users\kotora\Temp.txt",
[string] $user = "user",
[string] $passwd = "password"
)


# Telnet サーバからの問い合わせに応答(端末設定だけ vt100 にする)
# 復帰値: True ... テキストを受信したので続きの処理をお願い!
# False ... ネゴ用のストリームだけだったよ。
###############################################################################
function reply_IAC
{
$c = 0
for($c=0; $buffer[$c] -eq $IAC; $c+=3) {
if($buffer[$c+1] -eq $DO) {
switch($buffer[$c+2]) {
$TELOPT_TTYPE {
$nego = $IAC,$WILL,$buffer[$c+2]
$stream.Write($nego, 0, $nego.Length)
}
default {
$nego = $IAC,$WONT,$buffer[$c+2]
$stream.Write($nego, 0, $nego.Length)
}
}
$stream.Flush()
}
if($buffer[$c+1] -eq $SB) {
switch($buffer[$c+2]) {
$TELOPT_TTYPE {
# ターミナルタイプを vt100 に設定
$nego = $IAC,$SB,$TELOPT_TTYPE,00,118,116,49,48,48,$IAC,$SE
$stream.Write($nego, 0, $nego.Length)
}
default {
throw ("Unknown IAC SB request.$CR")
}
}
$stream.Flush()
# SB パケットだけ6バイトなのでその調整
$c+=3
}
if($buffer[$c+1] -eq $WILL) {
$nego = $IAC,$DO,$buffer[$c+2]
$stream.Write($nego, 0, $nego.Length)
$stream.Flush()
}
}
if($c -le 3) {
return $true
} else {
return $false
}
}


# Start Logging
###############################################################################
Start-Transcript -Path "$logfile"

# Main Loop
###############################################################################
try {
## ホストに TCP で接続
write-host "Connecting to $remoteHost on port $port`r`n"
$socket = new-object System.Net.Sockets.TcpClient($remoteHost, $port)
if($socket -eq $null) {
throw ("Could Not Connect")
}
write-host "Connected $remoteHost on port $port`r`n"

$stream = $socket.GetStream()
$writer = new-object System.IO.StreamWriter($stream)

$buffer = new-object System.Byte[] 1024
$nego = new-object System.Byte[] 1024
$encoding = new-object System.Text.UTF8Encoding

# Telnet Negotiation
$IAC = 255 # interpret as command:
$DONT = 254 # you are not to use option
$DO = 253 # please, you use option
$WONT = 252 # I won't use option
$WILL = 251 # I will use option
$SB = 250 # interpret as subnegotiation
$GA = 249 # you may reverse the line
$EL = 248 # erase the current line
$EC = 247 # erase the current character
$AYT = 246 # are you there
$AO = 245 # abort output--but let prog finish
$IP = 244 # interrupt process--permanently
$BREAK= 243 # break
$DM = 242 # data mark--for connect. cleaning
$NOP = 241 # nop
$SE = 240 # end of record (transparent mode)
$EOR = 239 # end of record (transparent mode)
$ABORT= 238 # Abort process
$SUSP = 237 # Suspend process
$xEOF = 236 # End of file: EOF is already used...

$TELOPT_BINARY = 0
$TELOPT_ECHO = 1
$TELOPT_SGA = 3
$TELOPT_NAWS = 4
$TELOPT_STATUS = 5
$TELOPT_NAOCRD = 10
$TELOPT_NAOFFD = 13
$TELOPT_TTYPE = 24
$TELOPT_TSPEED = 32
$TELOPT_XDISPLOC = 35
$TELOPT_NEW_ENVIRON = 39

$TELQUAL_IS = 0
$TELQUAL_SEND = 1
$TELQUAL_INFO = 2
$TELQUAL_REPLY = 2
$TELQUAL_NAME = 3

$CR = "`r`n"
$login_str = "login:"
$passwd_str = "Password:"
$debug = 0
$skip_byte = 0
$retry = 1800 # コマンド実行の最大待機時間: ($io_wait*$retry/1000)秒
$login_wait = 2000
$io_wait = 500

# Exsec comand list read
###########################################################################
$commands = Get-Content $cmdfile;

##
## Telnet Negitiation

# STAGE1: Telnet ネゴエーションとログイン
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m $io_wait
if ($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
if(reply_IAC) {
$line= $encoding.GetString($buffer, 0, $read)
if($line -match $login_str) {
write-host -n $line.SubString(3)
start-sleep -m $io_wait
$writer.WriteLine($user)
$writer.Flush()
}
if($line -match $passwd_str) {
write-host -n $line
start-sleep -m $io_wait
$writer.WriteLine($passwd)
$writer.Flush()
break
}
$rep = 1
}
}
}
if($rep -eq 0) {
throw ("No response negoation.$CR")
}
# プロンプトを受信
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m $io_wait
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
write-host -n ($encoding.GetString($buffer, 0, $read))
}
$rep = 1
break
}
}
if($rep -eq 0) {
throw ("No response login.$CR")
}
# ここから実行したいコマンドを実行…コマンドがなくなるまで繰り返し
###########################################################################
start-sleep -m $login_wait
for($i=0; $i -le $commands.Count; $i++) {
$rep = 0
$line = ""
start-sleep -m $io_wait
$writer.WriteLine($commands[$i])
$writer.Flush()
$i++
for($r=0; $r -lt $retry; $r++) {
start-sleep -m $io_wait
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
$line = ($encoding.GetString($buffer, 0, $read))
write-host -n $line
# 実行完了文字列をチェック
if($line -match $commands[$i]) {
$rep = 1
}
}
if($rep -eq 1) {
break
}
}
}
if($rep -eq 0) {
throw ("No response Command.$CR")
}
}
# ログアウト
###########################################################################
start-sleep -m $io_wait
$writer.WriteLine("exit")
$writer.Flush()

# ホストからの応答を受けて処理終了
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m $io_wait
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
write-host -n ($encoding.GetString($buffer, 0, $read))
}
start-sleep -m $io_wait
$writer.WriteLine("bye!") # 送信はなんでもOK!
$writer.Flush()
$rep = 1
break
}
}
if($rep -eq 0) {
throw ("No response exit.$CR")
}
}

# ERROR Routine(catch throw)
###############################################################################
catch {
write-host $error[0]
$dateTime = get-date
$errorOccurence = "Error occurred connecting to $remoteHost on $port at $dateTime"
write-host $errorOccurence
}

# Finalize
###############################################################################
finally {
write-host $CR
write-host exit program.$CR
$writer.Close()
$stream.Close()

stop-transcript
}



さらに、オートパイロットらしく、入力の応答を com.txt で指定する仕様に更新

PowerShell は使えますな…Visual Stadio Express のお陰で、Windows でも
いろいろプログラム組んでますけど、インタプリタで高機能なのは楽ちん♪
コマンドラインでぱぱぱっと書けるのが性に合ってるのです(笑)


com.txt の記入例)"user@ukikusa"というのはプロンプト文字列の一部
date
user@ukikusa
telnet localhost
login:
user
Password:
password
user@ukikusa
ls -ld *
user@ukikusa
logout
user@ukikusa


スクリプトソース)


## telnet-robot.ps1
##
## telnet プロトコルでサーバに接続してコマンドを実行する。
##
## 引数: remoteHost ホスト名
## port 接続ポート
## cmdfile リモートホストで実行するコマンドリスト
## logfile 実行ログを保存するファイル名
## user ユーザ名
## passwd パスワード
param(
[string] $remoteHost = "ukikusa",
[int] $port = 23,
[string] $cmdfile = "c:\users\kotora\com.txt",
[string] $logfile = "c:\users\kotora\Temp.txt",
[string] $user = "user",
[string] $passwd = "password"
)

# Start Logging
###############################################################################
Start-Transcript -Path "$logfile"

# Main Loop
###############################################################################
try {
## ホストに TCP で接続
write-host "Connecting to $remoteHost on port $port`r`n"
$socket = new-object System.Net.Sockets.TcpClient($remoteHost, $port)
if($socket -eq $null) {
throw ("Could Not Connect")
}
write-host "Connected $remoteHost on port $port`r`n"

$stream = $socket.GetStream()
$writer = new-object System.IO.StreamWriter($stream)

$buffer = new-object System.Byte[] 1024
$nego = new-object System.Byte[] 1024
$encoding = new-object System.Text.UTF8Encoding

# Telnet Negotiation
$IAC = 255 # interpret as command:
$DONT = 254 # you are not to use option
$DO = 253 # please, you use option
$WONT = 252 # I won't use option
$WILL = 251 # I will use option
$SB = 250 # interpret as subnegotiation
$GA = 249 # you may reverse the line
$EL = 248 # erase the current line
$EC = 247 # erase the current character
$AYT = 246 # are you there
$AO = 245 # abort output--but let prog finish
$IP = 244 # interrupt process--permanently
$BREAK= 243 # break
$DM = 242 # data mark--for connect. cleaning
$NOP = 241 # nop
$SE = 240 # end of record (transparent mode)
$EOR = 239 # end of record (transparent mode)
$ABORT= 238 # Abort process
$SUSP = 237 # Suspend process
$xEOF = 236 # End of file: EOF is already used...

$TELOPT_BINARY = 0
$TELOPT_ECHO = 1
$TELOPT_SGA = 3
$TELOPT_NAWS = 4
$TELOPT_STATUS = 5
$TELOPT_NAOCRD = 10
$TELOPT_NAOFFD = 13
$TELOPT_TTYPE = 24
$TELOPT_TSPEED = 32
$TELOPT_XDISPLOC = 35
$TELOPT_NEW_ENVIRON = 39

$TELQUAL_IS = 0
$TELQUAL_SEND = 1
$TELQUAL_INFO = 2
$TELQUAL_REPLY = 2
$TELQUAL_NAME = 3

$CR = "`r`n"
$debug = 0
$retry = 1000
$input_wait = 1000

# Exsec comand list read
###########################################################################
$commands = Get-Content $cmdfile;

##
## Telnet Negitiation

# STAGE1:サーバにサブコマンドの受付を要求
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
if($buffer[0] -eq $IAC) {
if($debug -eq 1) {
write-host Recieve1: $CR
for($i=0; $i -lt $read; $i++) {
write-host $buffer[$i]
}
write-host Reply1: $CR
}
for($c=0; $buffer[$c] -ne 0; $c+=3) {
if($buffer[$c+1] -eq $DO) {
if($buffer[$c+2] -eq $TELOPT_TSPEED) {
$nego = $IAC,$WONT,$TELOPT_TSPEED
$stream.Write($nego, 0, $nego.Length)
} else {
$nego = $IAC,$WILL,$buffer[$c+2]
$stream.Write($nego, 0, $nego.Length)
}
$stream.Flush()
if($debug -eq 1) {
write-host $nego $CR
}
}
}
}
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
# STAGE2:サブコマンドでこちらの端末設定を適当に送信
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
if($buffer[0] -eq $IAC) {
if($debug -eq 1) {
write-host Recieve2: $CR
for($i=0; $i -lt $read; $i++) {
write-host $buffer[$i]
}
write-host Reply2: $CR
}
for($c=0; $buffer[$c] -ne 0; $c+=6) {
if($buffer[$c+1] -eq $SB) {
switch($buffer[$c+2]) {
$TELOPT_XDISPLOC {
# XDisplay じゃないので適当に設定
$nego = $IAC,$SB,$TELOPT_XDISPLOC,0,0,0,0,$IAC,$SE
$stream.Write($nego, 0, $nego.Length)
}
$TELOPT_NEW_ENVIRON {
$nego = $IAC,$SB,$TELOPT_NEW_ENVIRON,$TELQUAL_IS,$IAC,$SE
$stream.Write($nego, 0, $nego.Length)
}
$TELOPT_TTYPE {
# ターミナルタイプを vt100 に設定
$nego = $IAC,$SB,$TELOPT_TTYPE,00,118,116,49,48,48,$IAC,$SE
$stream.Write($nego, 0, $nego.Length)
}
}
}
$stream.Flush()
if($debug -eq 1) {
write-host $nego $CR
}
}
}
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
# STAGE3:他の問い合わせに、全部問い合わせなくていいと回答
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
if($buffer[0] -eq $IAC) {
if($debug -eq 1) {
write-host Recieve3: $CR
for($i=0; $i -lt $read; $i++) {
write-host $buffer[$i]
}
write-host Reply3: $CR
}
for($c=0; $buffer[$c] -ne 0; $c+=3) {
if($buffer[$c+1] -eq $DO) {
$nego = $IAC,$WONT,$buffer[$c+2]
$stream.Write($nego, 0, $nego.Length)
$stream.Flush()
if($debug -eq 1) {
write-host $nego $CR
}
}
}
}
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
# ログインプロンプトにユーザとパスワードを送信
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
write-host -n ($encoding.GetString($buffer, 0, $read))
}
start-sleep -m $input_wait
$writer.WriteLine($user)
$writer.Flush()
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
write-host -n ($encoding.GetString($buffer, 0, $read))
}
start-sleep -m $input_wait
$writer.WriteLine($passwd)
$writer.Flush()
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
# プロンプトを受信
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
write-host -n ($encoding.GetString($buffer, 0, $read))
}
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response login`r`n")
}
# ここから実行したい管理コマンドを送信
###########################################################################
for($i=0; $i -le $commands.Count; $i++) {
$rep = 0
$line = ""
start-sleep -m $input_wait
$writer.WriteLine($commands[$i])
$writer.Flush()
$i++
for($r=0; $r -lt $retry; $r++) {
start-sleep -m $input_wait
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
$line = ($encoding.GetString($buffer, 0, $read))
write-host -n $line
# 実行完了文字列をチェック
if($line -match $commands[$i]) {
$r = $retry
$rep = 1
}
}
}
}
if($rep -eq 0) {
throw ("No response Command`r`n")
}
}
# ログアウト
###########################################################################
start-sleep -m $input_wait
$writer.WriteLine("exit")
$writer.Flush()
# ホストからの応答を受けて処理終了
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
write-host -n ($encoding.GetString($buffer, 0, $read))
}
start-sleep -m $input_wait
$writer.WriteLine("bye!") # 送信はなんでもOK!
$writer.Flush()
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response exit`r`n")
}
}

# ERROR Routine(catch throw)
###############################################################################
catch {
write-host $error[0]
$dateTime = get-date
$errorOccurence = "Error occurred connecting to $remoteHost on $port at $dateTime"
write-host $errorOccurence
}

# Finalize
###############################################################################
finally {
write-host `r`n
write-host exit program.`r`n
$writer.Close()
$stream.Close()

stop-transcript
}


telnet で繋ぐと、サーバ側から問い合わせがあります。


telnet 接続時の最初の通信

[IAC][DO][TELOPT_TTYPE]
[IAC][DO][TELOPT_SPEED]
[IAC][DO][TELOPT_XDISPLOC]
[IAC][DO][TELOPT_NEW_ENVIRON]


これらの質問は、1パケットで送られてくるので、一気に応答する。
うん、TELOPT_SPEED 以外は答えるね!


→[IAC][WILL][TELOPT_TTYPE]
→[IAC][WONT][TELOPT_SPEED]
→[IAC][WILL][TELOPT_XDISPLOC]
→[IAC][WILL][TELOPT_NEW_ENVIRON]


…問い合わせに応えると…こっからあとも1パケットで再質問がきます。


[IAC][SB][TELOPT_XDISPLOC][001][IAC][SE]
[IAC][SB][TELOPT_NEW_ENVIRON][001][IAC][SE]
[IAC][SB][TELOPT_TTYPE][001][IAC][SE]


各質問を解析して、端末タイプは、vt100 と応える。
といいつつ、TELOPT_TTYPE にだけ vt100 とまともな回答を送る。


→[IAC][SB][TELOPT_DISPLOC][0,0,0,0][IAC][SE]
→[IAC][SB][TELOPT_NEW_ENVIRON][TELQUAL_IS][IAC][SE]
→[IAC][SB][TELOPT_TTYPE][vt100][IAC][SE]


そのあと、1パケットでいろいろ聞いてくるけど、それには君の言うとおりでいいよと答える。
つまり、[IAC][DO]...で届くのに[DO]を[WONT]に変えて、そのまま返信するだけです。
いいかげんなように見えて、それでいいからもう聞くな!という応答なので、これでネゴは終了。
3回目のやりとりで、端末の設定関係を終了するように持っていっています。


そうすると、通常の端末入力のやりとりになるので、オートパイロットの開始です。
最初に TTY_ECHO が来るのを、そのまま表示しているので3バイトは文字化けしてますが気にしないで(笑)
という、簡単なロジックで動作しています。
詳細は、ソースをみてね。


前に公開したのが、1回目のログインに無理失敗させて逃げるという仕様だったのが気になっていて、ちゃんと1回目のログインで成功するよう修正しました。





## telnet-robot.ps1
##
## telnet プロトコルでサーバに接続してコマンドを実行する。
##
## 引数: remoteHost ホスト名
## port 接続ポート
## cmdfile リモートホストで実行するコマンドリスト
## logfile 実行ログを保存するファイル名
## user ユーザ名
## passwd パスワード
param(
[string] $remoteHost = "ukikusa",
[int] $port = 23,
[string] $cmdfile = "c:\users\kotora\com.txt",
[string] $logfile = "c:\users\kotora\Temp.txt",
[string] $user = "user",
[string] $passwd = "password"
)

# Start Logging
###############################################################################
Start-Transcript -Path "$logfile"

# Main Loop
###############################################################################
try {
## ホストに TCP で接続
write-host "Connecting to $remoteHost on port $port`r`n"
$socket = new-object System.Net.Sockets.TcpClient($remoteHost, $port)
if($socket -eq $null) {
throw ("Could Not Connect")
}
write-host "Connected $remoteHost on port $port`r`n"

$stream = $socket.GetStream()
$writer = new-object System.IO.StreamWriter($stream)

$buffer = new-object System.Byte[] 1024
$nego = new-object System.Byte[] 1024
$encoding = new-object System.Text.UTF8Encoding

# Telnet Negotiation
$IAC = 255 # interpret as command:
$DONT = 254 # you are not to use option
$DO = 253 # please, you use option
$WONT = 252 # I won't use option
$WILL = 251 # I will use option
$SB = 250 # interpret as subnegotiation
$GA = 249 # you may reverse the line
$EL = 248 # erase the current line
$EC = 247 # erase the current character
$AYT = 246 # are you there
$AO = 245 # abort output--but let prog finish
$IP = 244 # interrupt process--permanently
$BREAK= 243 # break
$DM = 242 # data mark--for connect. cleaning
$NOP = 241 # nop
$SE = 240 # end of record (transparent mode)
$EOR = 239 # end of record (transparent mode)
$ABORT= 238 # Abort process
$SUSP = 237 # Suspend process
$xEOF = 236 # End of file: EOF is already used...

$TELOPT_BINARY = 0
$TELOPT_ECHO = 1
$TELOPT_SGA = 3
$TELOPT_NAWS = 4
$TELOPT_STATUS = 5
$TELOPT_NAOCRD = 10
$TELOPT_NAOFFD = 13
$TELOPT_TTYPE = 24
$TELOPT_TSPEED = 32
$TELOPT_XDISPLOC = 35
$TELOPT_NEW_ENVIRON = 39

$TELQUAL_IS = 0
$TELQUAL_SEND = 1
$TELQUAL_INFO = 2
$TELQUAL_REPLY = 2
$TELQUAL_NAME = 3

$CR = "`r`n"
$debug = 0
$retry = 1000
$input_wait = 1000

# Exsec comand list read
###########################################################################
$commands = Get-Content $cmdfile;

##
## Telnet Negitiation

# STAGE1:サーバにサブコマンドの受付を要求
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
if($buffer[0] -eq $IAC) {
if($debug -eq 1) {
write-host Recieve1: $CR
for($i=0; $i -lt $read; $i++) {
write-host $buffer[$i]
}
write-host Reply1: $CR
}
for($c=0; $buffer[$c] -ne 0; $c+=3) {
if($buffer[$c+1] -eq $DO) {
if($buffer[$c+2] -eq $TELOPT_TSPEED) {
$nego = $IAC,$WONT,$TELOPT_TSPEED
$stream.Write($nego, 0, $nego.Length)
} else {
$nego = $IAC,$WILL,$buffer[$c+2]
$stream.Write($nego, 0, $nego.Length)
}
$stream.Flush()
if($debug -eq 1) {
write-host $nego $CR
}
}
}
}
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
# STAGE2:サブコマンドでこちらの端末設定を適当に送信
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
if($buffer[0] -eq $IAC) {
if($debug -eq 1) {
write-host Recieve2: $CR
for($i=0; $i -lt $read; $i++) {
write-host $buffer[$i]
}
write-host Reply2: $CR
}
for($c=0; $buffer[$c] -ne 0; $c+=6) {
if($buffer[$c+1] -eq $SB) {
switch($buffer[$c+2]) {
$TELOPT_XDISPLOC {
# XDisplay じゃないので適当に設定
$nego = $IAC,$SB,$TELOPT_XDISPLOC,0,0,0,0,$IAC,$SE
$stream.Write($nego, 0, $nego.Length)
}
$TELOPT_NEW_ENVIRON {
$nego = $IAC,$SB,$TELOPT_NEW_ENVIRON,$TELQUAL_IS,$IAC,$SE
$stream.Write($nego, 0, $nego.Length)
}
$TELOPT_TTYPE {
# ターミナルタイプを vt100 に設定
$nego = $IAC,$SB,$TELOPT_TTYPE,00,118,116,49,48,48,$IAC,$SE
$stream.Write($nego, 0, $nego.Length)
}
}
}
$stream.Flush()
if($debug -eq 1) {
write-host $nego $CR
}
}
}
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
# STAGE3:他の問い合わせに、全部問い合わせなくていいと回答
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
if($buffer[0] -eq $IAC) {
if($debug -eq 1) {
write-host Recieve3: $CR
for($i=0; $i -lt $read; $i++) {
write-host $buffer[$i]
}
write-host Reply3: $CR
}
for($c=0; $buffer[$c] -ne 0; $c+=3) {
if($buffer[$c+1] -eq $DO) {
$nego = $IAC,$WONT,$buffer[$c+2]
$stream.Write($nego, 0, $nego.Length)
$stream.Flush()
if($debug -eq 1) {
write-host $nego $CR
}
}
}
}
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
# ログインプロンプトにユーザとパスワードを送信
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
write-host -n ($encoding.GetString($buffer, 0, $read))
}
start-sleep -m $input_wait
$writer.WriteLine($user)
$writer.Flush()
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
write-host -n ($encoding.GetString($buffer, 0, $read))
}
start-sleep -m $input_wait
$writer.WriteLine($passwd)
$writer.Flush()
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
# ここから実行したいコマンドを送信
###########################################################################
$rep = 0
for($i=0; $i -le $commands.Count; $i++) {
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
if($buffer[0] -eq $IAC) {
for($c=0; $c -lt $read; $c++) {
write-host $buffer[$c]
}
}
write-host -n ($encoding.GetString($buffer, 0, $read))
}
start-sleep -m $input_wait
$writer.WriteLine($commands[$i])
$writer.Flush()
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
}
# ログアウト
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
write-host -n ($encoding.GetString($buffer, 0, $read))
}
start-sleep -m $input_wait
$writer.WriteLine("exit")
$writer.Flush()
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
# ホストからの応答を受けて処理終了
###########################################################################
$rep = 0
for($r=0; $r -lt $retry; $r++) {
start-sleep -m 500
if ($stream.DataAvailable) {
while($stream.DataAvailable) {
$read = $stream.Read($buffer, 0, 1024)
write-host -n ($encoding.GetString($buffer, 0, $read))
}
start-sleep -m $input_wait
$writer.WriteLine("bye!") # 送信はなんでもOK!
$writer.Flush()
$r = $retry
$rep = 1
}
}
if($rep -eq 0) {
throw ("No response negoation`r`n")
}
}

# ERROR Routine(catch throw)
###############################################################################
catch {
write-host $error[0]
$dateTime = get-date
$errorOccurence = "Error occurred connecting to $remoteHost on $port at $dateTime"
write-host $errorOccurence
}

# Finalize
###############################################################################
finally {
write-host `r`n
write-host exit program.`r`n
$writer.Close()
$stream.Close()

stop-transcript
}


研究生12名のみなさん、チーム昇格おめでとうございますd(>∇<*)゜.+:

ま、ドラフトとかでいきなりチームメンになっちゃうシステムを取り入れられて

みんないっぱい悔しい思いをしたと思います。

そんなこんなありながら、負けずに続けたから、この日が来たんだと思います。

それに、研究生といいながらチーム研究生でシアターを守ってたものね。

チームアンダーメンより、いっぱいいい経験をしてたと思う。

でも、研究生じゃグッズを作ってもらえないものね!

これから、しっかり自分を売って昇ってくださいヽ( ^^)ノヽ(^ ) ヽ(^^ )^-^)ノ
毎年、神戸では震災のドキュメンタリーとかニュースを伝える番組が組まれているのですが

今年は、例年より多いですね…過去の経験を振り返って、次に備えることは大切ですね。

サンテレビで映画&ドラマも作られて…藤本泉さん可愛いヽ( ^^)ノヽ(^ ) ヽ(^^ )^-^)ノ

と、結局、人間失格な見方をする、おっさんです(*´艸`)

震災を経験してない人口が神戸市で4割になったそうです。

おれも関東に出稼ぎに行ってたから経験してないヽ( ^^)ノヽ(^ ) ヽ(^^ )^-^)ノ

でも、震災翌日に、カセットコンロのボンベを2ダース抱えて、関東から在来線で実家に

帰りました。(新幹線が止まったのです)。浜松で、翌日の始発待ちになって、おまわりさん

に職務質問されたな…

で、その荷物の中味を見せていただけますか?(かなり大きな荷物になってた)と言われて

見せたな…中から…カセットボンベ2ダース。。゛(ノ><)ノ ヒィ

おまわりさんに事情を話すと、通常だと電車に乗って頂くわけにいかないのですが、

事情が事情ですのでお気を付けて行って下さいと人道的対処。。。

おまわりさん、事故なく家族に届けられました!ありがとうございましたd(>∇<*)゜.+:

在来線も神戸線が止まっていて、三田経由で神戸電鉄で、ひよどりまでいって、

源義経のようにひよどり越えで実家に帰りました。徒歩20Kmヽ( ^^)ノヽ(^ ) ヽ(^^ )^-^)ノ

と、今日は、ちょっと想い出にひたりました。