2016-06-26 2 views
1

C#でUDPパケットを生成し、与えられたIPアドレスに送信するパケットシミュレータをプログラミングしました。シミュレータはパケットを生成してUBUNTU仮想マシンに送信しますが、宛先に問題があります。 C#プログラム、として定義されたデータ形式で:libpcapで "MMM" DateTime形式をキャプチャする際のエラー

namespace PacketSimulator 
{ 
    static class Program 
    { 
     public static string DateFormat = "MMM dd HH:mm:ss"; 
     . 
     . 
    } 
} 

とパケットが送信されます。

namespace PacketSimulator 
{ 
    class ConnectionInfo 
    { 
     public DateTime DATE_TIME; 
     public override string ToString() 
     { 
      return DATE_TIME.ToString(Program.DateFormat) + " " + "10.0.72.45 " + .... 

     } 
    } 
} 

しかし、Linux側では、私は何をキャプチャすることができますことは、私が送ったものと少し異なります。

???? 26 18:17:10 10.0.72.45 

C#プログラムでは「MMM」(3文字の月名)と定義されていますが、Lipcapでキャプチャするのは4文字のテキストですか?

私が必要とするのは、4つではなく定義された形式でパケットを受信することですか?符号。

アドバイスを事前にいただきありがとうございます。

+1

1.パケットを送信するときに、どのようにテキストをエンコードしますか?これは受信側と一致しますか? 2.ワイヤー上のもの(WireSharkなど)を見ましたか? 3.一般にIPCの場合、日付と時刻の最適なフォーマットはISO-8601: 'yyyy-MM-ddTHH:mm:ss'です。これは他のフォーマットのあいまいさやローカリゼーションの問題を避けます。 – Richard

+0

@Richard 1-エンコーディングは使用されません。私はlibpcapライブラリを問題の本文のように使用しています3 - ありがとう –

+0

もちろん、エンコードが使用されています(暗黙的かもしれませんが、そこにあります):UDPパケットの内容はオクテットの配列ですが、.NETの文字列はバイトの配列なので、変換をエンコーディングする必要があります。これを制御する必要があります。 – Richard

答えて

1

MSDN:

"MMM" のカスタム書式指定子が 月の省略名を表します。現時点または指定されたカルチャの のDateTimeFormatInfo.AbbreviatedMonthNamesプロパティから、月のローカライズされた短縮名が取得されます( )。それが失敗した場合

は、それはそれのlibpcapが何らかの理由でDateTimeFormatInfo.AbbreviatedMonthNamesにアクセスすることはできませんでなければならない、CultureInfo

return DATE_TIME.ToString(Program.DateFormat,CultureInfo.InvariantCulture) + " " + "10.0.72.45 " + .... 

に渡してみてください。

+0

ありがとうございました。それは私のために働いた:-) –

関連する問題