2017-09-04 6 views
8

特定のポートの状態を「LISTENING」、「CLOSE_WAIT」、「ESTABLISHED」にトラッキングするのに役立ちます。 私はnetstatコマンドとアナログ・ソリューションがあります。Luaの "ソケット"ライブラリを使ってポートの状態を調べることはできますか?

local command = 'netstat -anp tcp | find ":1926 " ' 
local h = io.popen(command,"rb") 
local result = h:read("*a") 
h:close() 
print(result) 
if result:find("ESTABLISHED") then 
    print("Ok") 
end 

をしかし、私はLua socket libraryと同じことを行う必要があります。 可能ですか?

+0

なぜですか?確かにあなたは自分のソケットの状態を知っていますか? 'listen()'を呼び出すと、それは聞こえます。あなたが 'connect()'または 'accept()'を呼び出した場合、それは設定されています。ストリームを受信して​​終了した場合は、CLOSE_WAITにあります。 – EJP

+0

@EJP質問には、同じプロセスがクエリを行うことによってソケットが所有されているとは示されていません。それでも、一部の州を簡単に推論することはできません。 TIME_WAIT - カーネルに問い合わせることなく –

答えて

1

ソケットAPIを使用して別のプロセスが所有するソケットのステータスを照会することはできません。これはLuaSocketがカバーで使用するものです。

別のプロセスに関する情報にアクセスするには、代わりにOSをクエリする必要があります。あなたがLinux上にいると仮定すると、これは通常、procファイルシステムを見ることを意味します。

私はLuaに非常に精通していませんが、すばらしいGoogleが私にこのプロジェクトを提供します:https://github.com/Wiladams/lj2procfs。私はこれがおそらくあなたが必要とするものだと思っています。あなたが必要とする適切なファイルのデコーダを書いていると仮定します。

どのファイルですか?それだけの状態だ場合、私はhttp://www.onlamp.com/pub/a/linux/2000/11/16/LinuxAdmin.html

1

@Peterが言ったようにカバーされて、あなたがtcpファイルをしたいと思います、netstatは、ネットワーク情報、特にポートバインディングを収集するためにprocファイルシステムを使用しています。 LuaSocketsには、接続情報を取得するためのライブラリがあります。例えば、 を聞く

あなたは、サーバーオブジェクトにオブジェクトを変換、ソケットが接続を受信するために喜んで指定するmaster:listen(backlog)を使用することができます。サーバーオブジェクトは、accept、getsockname、setoption、settimeout、およびcloseメソッドをサポートしています。パラメータbacklogは、サービス待ちのキューに入れることができるクライアント接続の数を指定します。キューがいっぱいで、別のクライアントが接続を試みると、接続は拒否されます。成功の場合、メソッドは1を返します。エラーが発生した場合、このメソッドはnilとそれに続くエラーメッセージを返します。

次のメソッドは、ローカルIPアドレスとポートと番号で文字列を返します。エラーの場合、このメソッドはnilを返します。 client:getpeername()ピアのIPアドレスを使用して文字列を返しますが、接続のために使用されるピアポート番号が続く:

master:getsockname() 
client:getsockname() 
server:getsockname() 

も、この方法が存在します。エラーの場合、このメソッドはnilを返します。

"CLOSE_WAIT"、 "ESTABLISHED"、またはその他の接続情報を取得する場合は、Official Documentationをお読みください。それは、方法の簡潔な説明と必要なすべてを持っています。

関連する問題