2014-10-07 6 views
0

여러 네트워크 장치에서 패킷을 수신하고 다른 장치 (소프트웨어 허브와 같은)로 보낼 프로그램을 만들려고합니다. 나는 C#과 pcapdotnet을 사용하고있다. 이 간단한 방법은 기기에 통신을 캡처 :C# pcapdotnet ReceivePackets 콜백에서 장치 사용

public void sniff(LivePacketDevice device) 
    { 
     using(PacketCommunicator comm = device.Open(65536, PacketDeviceOpenAttributes.Promiscuous, 1000)) 
     { 
      comm.ReceivePackets(0, printandsend); 
     }   
    } 

콜백 메소드에서 "printandsend"나는 패킷의 출처 장치를 제외한 모든 기기에 패킷을 보내려고합니다. 패킷을 보낸 장치에서 패킷을 보내지 못하게하려면 어떤 장치 패킷이 왔는지 알아야합니다. 문제는 현재 사용 된 장치를 해당 콜백 메서드로 구문 분석하는 방법을 파악할 수 없다는 것입니다. 메서드 외부의 변수는 패킷 캡쳐가 동시에 여러 장치에서 사용되기 때문에 해결 방법이 아닙니다. 같은 시간에 장치를 캡쳐하는 것은 "스 니프"방법의 스레드를 생성하여 제공됩니다.

Packet packet; 
While(true) 
{ 
    comm.ReceivePacket(out packet); 
    send(packet,device)     
    //this would send packet on every device except the one which is used as a parameter 
} 

문제는 내가이 해결 방법은 모든 패킷이 성공적으로 수신 및 전송됩니다 제공 할 수 있는지 확실하지 않다이다 :

방법 receivePacket를 사용하여 가능한 해결 방법이 있습니다.

답변

1

당신이 진짜 문제를 발견했기 때문에 ReceivePacket()을 사용하는 것이 좋습니다.

ReceivePacket()은 사용이 간편하며 대부분의 응용 프로그램에 사용하기에 충분합니다.

여전히 ReceivePackets()를 사용하려는 경우 콜백 메소드로 클래스를 만들고 각 클래스에 대해이 클래스의 인스턴스를 만들 수 있습니다.