SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

F#

IcmpSendEcho()によるpingの送受信(#C)(#F)

F# C#

IPHLPAPI.DLLのIcmpSendEcho()によりpingの送受信が行えます。 以前に紹介した、System.Net.NetworkInformation.Pingより、ややきめ細かい指定が可能です。 C#サンプル using System; using System.Runtime.InteropServices; namespace Example { class Prog…

DHCPで取得したアドレスのreleaseとrenew (C#)(F#) その2

F# C#

先日の同タイトルの記事のうち、F#サンプルを書き直してみたので再投です。DHCPで取得した動的アドレスは、iphelapi.dllのIpReleaseAddressとIpRenewAddressで開放と再取得が可能です。同APIのパラメータ(IP_ADAPTER_INDEX_MAP )は、GetInterfaceInfoで取…

DHCPで取得したアドレスのreleaseとrenew (C#)(F#)

F# C#

2011.11.28 追記 本記事のF#サンプルを書き直しました。DHCPで取得した動的アドレスは、iphelapi.dllのIpReleaseAddressとIpRenewAddressで開放と再取得が可能です。同APIのパラメータ(IP_ADAPTER_INDEX_MAP )は、GetInterfaceInfoで取得したインターフェ…

HttpWebRequestで取得したデータをcharsetに応じてデコードする (C#)(F#)

F# C#

先にも書いた通り、HttpWebRequestで取得したデータをstringに変換する際、HttpWebResponsのCharacterSetプロパティで示されるエンコード形式は正確でない事があります。下記のサンプルでは、HttpWebRequestで取得したデータをbyteで受け、一旦ASCIIでstring…

HttpWebRequestによる軽易なHTTPデータ受信 (C#)(F#)

F# C#

System.Net.WebRequestを利用すると、軽易にHTTPでデータを取得できます。 サンプルでは、HTTPリクエストと同レスポンスのヘッダを列挙表示しています。受信したデータの本体を取得する場合はHttpWebResponsのGetResponseStream()でストリームを生成しこれを…

パケットの送受信量 (C#)(F#)

F# C#

System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()でパケットの送受信量を取得することができます。サンプルでは、キーを押すたびに最新の情報を再表示します。C#サンプル using System; using System.Net.NetworkInformation; nam…

Socketを利用したパケットモニタ (C#)(F#)

F# C#

IP層で動作するパケットモニタです。 SocketType.Raw, ProtocolType.IPでSocketを作成し、IOControlでIOControlCode.ReceiveAllをセットします。 IOControlCode.ReceiveAllは、SIO_RCVALLと同じです。取得したデータは、IP層のデータですので、8バイト目がTT…

ネットワークアダプタの情報 ipcnfig /all (C#)(F#)

F# C#

WMIのWin32_NetworkAdapterConfigurationによって、ipconfig /allで取得するようなネットワークアダプタの情報を取得する事ができます。 ※WMIを使用するには、参照設定で「System.Management」を追加する必要があります。C#サンプル using System; using Sys…

ルーティングテーブルの取得 (C#)(F#)

F# C#

WMI(WindowsManagementInstrumentation) からルーティングテーブルの情報を取得することができます。 サンプルは、「route print -4」とした時と同じです。 なお、インターフェースは、「Win32_IP4RouteTable」クラスでは、インデックス番号しか取得できませ…

ARPテーブルの削除 (C#)(F#)

F# C#

iphlpapi.dllのDeleteIpNetEntry()を使用してARPテーブルの削除が可能です。 下記のサンプルは、現在のARPテーブルを取得して、その情報を削除しています。(コマンドのラインから「arp -d」とした場合と同じ) static(静的)なテーブルを削除したくない…

ARPテーブルの取得 (C#)(F#)

F# C#

ARPテーブル一覧は、iphlpapi.dllのGetIpNetTable()で取得できます。 サンプルは、コマンドラインから「arp -a」としたものと同じです。C#サンプル using System; using System.Runtime.InteropServices; using System.Collections.Generic; using System.Li…

ARPテーブルの追加 (C#)(F#)

F# C#

iphlpapi.dllの CreateIpNetEntry()でARP追加することができます。追加した、ARPテーブルは、コマンドラインで「arp -a」とする事で確認できます。CreateIpNetEntry()は、追加情報がすでに存在するときエラーとなるので、サンプルを実行する場合は、「arp -d…

TCPコネクションの一覧取得(プロセスID含む) (C#)(F#)

F# C#

netstatに-oオプションを付けると、それぞれのコネクションのプロセスIDが表示されますが、GetTcpTable()では、プロセスIDを取得することができません。WindowsXPまでは、この情報が必要な場合、非公開のAPIであるAllocateAndGetTcpExTableFromStack()を使用…

pingの送受信 (C#)(F#)

F# C#

pingの送受信は、System.Net.NetworkInformation.Pingが使用できます。 宛先にはホスト名でもIPアドレス指定可能できます。 名前解決に失敗すると例外が発生するので、ホスト名で宛先を指定する時は例外処理が必要です。 ※IPv6アドレスでも使用可能ですが、R…

TCPコネクションの一覧取得 (C#)(F#)

F# C#

TCPコネクションの一覧は、iphlpapi.dllのGetTcpTable()で取得することが可能です。 GetTcpTable()で取得するデータサイズは、最初にnullを指定して確認します。コマンドラインから「netstat -an -p TCP」としたときの出力と同じものです。C#サンプル using …

DNS問い合わせ (C#)(F#)

F# C#

名前解決には、GetHostEntry()の利用が推奨されていますが、これは、「ホスト名」ー「IPアドレス」の相互解決しか対応していません。また、実装上、NAT内のネットワーク(ホストにリンク ローカルアドレスまたは Teredoアドレスしか割り当てられていない場合…

DNSサーバの取得 (C#)(F#)

F# C#

WMIによって管理されている情報からDNSサーバの設定を取得できます。WMIクラスの使用例 ※ManagementClass による取得 var mc = new ManagementClass("Win32_Service"); foreach (var m in mc.GetInstances()) Console.WriteLine(m["Name"]); ※ManagementObje…

ホスト名からIPアドレス、IPアドレスからホスト名を取得(C#)(F#)

F# C#

Dns.GetHostByName()及びDns.GetHostByAddressを使用したドキュメントが多く公開されているが、 これらは、.NET Framework 2.0以降、obsoleted(旧式)となっており、 代わりに、現在はSystem.Net.Dns.GetHostEntryの使用が推奨されています。C#サンプル using…

NICのデバイス名とインデックスの列挙 (C#)(F#)

F# C#

NICのデバイス名とインデックス番号は、通常、表面上はプログラムに現れて来ませんが、ネットワーク関連のプログラムを作成していると、要求されることがよくあります。 この情報は、iphlpapi.dllのGetInterfaceInfo()を使用することで取得できます。GetInte…

ワークグループ・コンピュータ名の取得 (C#)(F#)

F# C#

ワークグループや、コンピュータ名を取得するには、netapi32.dllのNetWkstaGetInfo()を使用します。 ※NetWkstaGetInfoで取得したデータ(構造体)は、システムが割り当てた領域であるため< NetApiBufferFree()で解放する必要があるC#サンプル using System; …

インターフェース(MACアドレス等)の一覧取得 (C#)(F#)

F# C#

自端末のインターフェースの一覧が必要な場合は、 System.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()を使用して System.Net.NetworkInformation.NetworkInterfaceの配列を取得します。System.Net.NetworkInformation.NetworkInterf…

ARPによるMACアドレスの取得 (C#) (F#)

F# C#

.NET Frameworkの標準ライブラリに機能が無いため、iphlpapi.dllのSendARPをインポートして使用します。この方法により、ブロードキャストネットワーク内の端末(自分自身を含む)のMACアドレスを取得できます。IPアドレスをもとに検索するので、自分自身の…

BJDのバージョン更新(F#)

F#

先日作成したZipファイル作成の部分を使用して、BJD更新時に行う定型処理をF#で書いてみました。主な、作業は、下記のとおりです。(1) バイナリのzipファイル作成(2) ソースコードのZipファイル作成(3) msiファイルの名前変更この作業で、bjd-5.3.3.zip bjd-…

Zip圧縮ファイルの作成(F#)

F#

F#入門に、いいアプローチは?と質問してみたところ@jsakamoto氏に「定型処理(スクリプト)で有効利用できますよ」と教えて頂きました。 という事で、さっそく、BlackJumboDogの定型処理をF#で書いてみることにしました。 本日は、手始めにZIPファイル生成…