2017-04-18 7 views
0

UDPポートスキャナを作成しました。私は同じネットワーク内の別のデバイスにパケットを送信しますが、ここでは少し問題があります.Wiresharkが異なるポート(それぞれのポートが閉じている)で10パケットを送信すると、wiresharkは1パケットしか受け取りません。私は10種類のICMPパッケージを受け取るべきです:3.コードを変更するにはどうしたらよいでしょうか?ポートスキャナ - icmpパケット

using PcapDotNet.Core; 
using PcapDotNet.Packets; 
using PcapDotNet.Packets.Ethernet; 
using PcapDotNet.Packets.IpV4; 
using PcapDotNet.Packets.Transport; 
using System; 
using System.Collections.Generic; 

namespace SendingASinglePacketWithSendPacket 
{ 
class Program 
{ 
    static void Main(string[] args) 
    { 
     IList<LivePacketDevice> allDevices = LivePacketDevice.AllLocalMachine; 
     PacketDevice selectedDevice = allDevices[2]; 


     for (int i = 1; i < 10; i++) 
     { 
      new Sender().SendUDPandGetStatus(selectedDevice, (ushort)i); 
     } 


     System.Console.ReadKey(); 
    } 
} 

class Sender 
{ 
    public void SendUDPandGetStatus(PacketDevice selectedDevice, ushort port) 
    { 
     using (PacketCommunicator communicator = selectedDevice.Open(100, PacketDeviceOpenAttributes.Promiscuous, -1)) 
     {   
      communicator.SendPacket(BuildUdpPacket(port)); 
     } 
    } 

    private static Packet BuildUdpPacket(ushort destinationPort) 
    { 
     EthernetLayer ethernetLayer = new EthernetLayer 
     { 
      Destination = new MacAddress("14:cc:20:2c:7e:36"), 
      Source = new MacAddress("9C:4E:36:17:86:48"), 

      EtherType = EthernetType.None, 
     }; 

     IpV4Layer ipV4Layer =new IpV4Layer 
     { 
      Source = new IpV4Address("192.168.0.104"), 
      CurrentDestination = new IpV4Address("192.168.0.105"), 
      Fragmentation = IpV4Fragmentation.None, 
      HeaderChecksum = null, 
      Identification = 123, 
      Options = IpV4Options.None, 
      Ttl = 30, 
      TypeOfService = 0, 
     }; 

     UdpLayer udpLayer = new UdpLayer 
     { 
      SourcePort = 4050, 
      DestinationPort = destinationPort, 
      Checksum = null, 
      CalculateChecksumValue = true, 
     }; 

     PacketBuilder builder = new PacketBuilder(ethernetLayer, ipV4Layer, udpLayer); 
     return builder.Build(DateTime.Now); 
    } 
} 
} 

Wiresharkの結果:

new Sender().SendUDPandGetStatus(selectedDevice, (ushort)i); 

をし、F5ボタン(5秒間隔)を押して、正しい結果を得る: enter image description here

私は唯一の私が行にブレークポイントを置く場合は追加します。

+0

ICMPは、pingメッセージであり、あなたは、ルーティングループを持っている場合はブロックされます。 cmd.exe> PING 192.168.0.104を使用してみて、応答を見てください。 [存続可能時間]をチェックして、メッセージが通過したルータの数を示します。 – jdweng

+0

あなたは正しいかもしれませんが、私の場合は同じルータに2台のコンピュータを接続しています。 tracertコマンドとTTLの値が高いことを確認しました。私は問題が "Linux 2.4.20カーネルは到達不能なメッセージを1秒に1つに制限する"と考えています。 「System.Threading.Thread.Sleep(1000);」を追加するとループ内で、問題が消えます。私はウィンドウ上の制限がLinux上と同じであることを推測することができます。 –

+0

IPアドレスとマスクを取得し、ルートがあることを確認してください。サブネット内の各デバイスにpingを送信して、到達可能なデバイスを確認することができます。また、宛先デバイスとpingソースデバイスに移動します。私は、あなたが一方向へのルートを持っていないと思う。 – jdweng

答えて

0

これは私がNmapのドキュメントで見つけたものです:

Nmapがレート制限を検出し、そのターゲットマシンが ドロップします役に立たないパケットでネットワークをフラッディング を避けるために、それに応じて遅くなります。残念ながら、Linuxスタイルのは1秒あたり1パケットの制限を受けます。 は65,536ポートのスキャンに18時間以上を要します。スピードを上げるためのアイデア UDPスキャンには、 ファイヤースキャンを最初に実行し、 ファイアウォールの後ろからスキャンし、--host-timeoutを使用して低速ホストをスキップします。

Documentation

+1

Windowsとは異なり、Linuxマシンは複数のIPアドレスを持つことができます。したがって、複数のIPを使ってNmapをだますことができます。 – jdweng

+0

私はいくつかのWindowsマシンでテストしました。同じ効果がありますが、Linuxではすべて正常に動作します。私は反対の振る舞いを期待していました。 –

+0

1つのIPを持つウィンドウには1秒あたり1パケットの制限があります。複数のIPを使用すると、IPアドレスごとに1つのパケットが作成されます。あなたが5つのIPアドレスを持っているなら、あなたは毎秒5パケットを持っています。 – jdweng

関連する問題