SIN@SAPPOROWORKSの覚書

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

2011-01-01から1年間の記事一覧

F#によるパケットモニタの作成(WinPcap)

本記事は、「F# Advent Calendar 2011 」の12月12日分です。「F#の街さっぽろ」に住む、札幌ワークスのSINです。F#を始めたばかりの超初心者です。近くの方々に色々やさしく教えて頂きながら楽しく勉強中です。「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で取…

あ〜Ping 「ICMPがファイアウォールでブロックされている端末の疎通確認」

HokkaidoCap#8でLTのお時間頂きました。最近のPCは、パーソナルファイアウォールにより、ほとんどの場合デフォルトでpingに返事しないようになっています。LAN内のPCをpingで確認しようとしても、返事が返ってこないのでちょっと面倒くさい。 今回は、ICMPを…

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()でストリームを生成しこれを…

BLackJumboDog 運転と改造のすすめ

CLR/H64 でお話させて頂きました。参加された方々、つまらない話に1時間もおつきあい頂き感謝です。 もし、ご利用になられる事がありましたら、気楽に声を掛けてください。 全面的にサポートさせて頂きます。 B lack jumbodog 運転と改造のすすめ View more…

パケットの送受信量 (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…

モデムカードの分解

1.一枚50円今は懐かしい、Cバスのモデムカードを入手しました。 店頭では1枚500円という値札が貼られてましたが、山済みされたカードを4枚持ってきて頼んでみると、1枚で50円という破格(?)になりました。 少し、リレーの色や部品の型番に違いが…

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

F# C#

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

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

F# C#

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

ヘッドセットの変わりに電話機を使用する

パソコンのオーディオ端子(ヘッドフォン・マイク)に電話機を接続して使用する方法を考えてみました。ヘッドセットの変わりに電話機を使用するイメージです。1.試作電話機が動作できるように電話回線に直流電圧を加えます。トランスは、古いモデムを分解し…

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アドレスをもとに検索するので、自分自身の…

癒し系ネットワーク機器をPingで起こす

2011.10.21に行われた第7回 北海道パケットキャプチャ勉強会「Hokkaido.cap」でのLTの資料です。先日作成したガジェットをプレゼンさせて頂きました。 癒し系ネットワーク機器をPingで起こす View more presentations from furuya02

癒し系ネットワーク機器

1.Crispin Jones氏がデザインしたUSBガジェット音に反応して表情変化する。眠ったり、息を吹きかけると驚いて目を覚ますといったリアクションするらしい こんなのを作ってみたい・・・・という事で、真似事ですが、私も作成してみることにしました。完成イメ…

Teredoについての覚書

先日参加させて頂いたTechEzo(D.I.Y)の勉強会で、IPv6についていろいろ教えて頂きました。その中で、IpV6トンネリング技術の1つにTeredoというのがあり、Vista以降ではデフォルトで有効になっている事を初めて知りました。非常にややこしくてよく理解できな…