2009-11-06 5 views
1

두 개의 가상 네트워크가 있습니다 (예 : 10.116.10.xxx 및 10.116.11.xxx). 나는 마법의 패킷을 전송하려면 다음 코드를 :매직 패킷 및 가상 네트워크

using System; 
using System.Net; 
using System.Net.Sockets; 
using System.Globalization; 

public class MagicPackets:UdpClient  
{ 
    public MagicPackets() : base() 
    { 
    } 

    public void SetClientToBrodcastMode()  
    { 
     if(this.Active) 
     this.Client.SetSocketOption(SocketOptionLevel.Socket, 
           SocketOptionName.Broadcast,0); 
    } 
} 

public class Run 
{ 
    public static void Main(string[] args) 
    { 
     Run.WakeFunction(args[0]); 
    } 

    private static void WakeFunction(string MAC_ADDRESS) 
    { 
      MagicPackets client=new MagicPackets(); 
      client.Connect(new 
      IPAddress(0xffffffff), 
      0x2fff); 
      client.SetClientToBrodcastMode(); 
      int counter=0; 
      byte[] bytes=new byte[1024]; 
     //first 6 bytes should be 0xFF 
     for(int y=0;y<6;y++) 
      bytes[counter++]=0xFF; 
     //now repeate MAC 16 times 
     for(int y=0;y<16;y++) 
     { 
      int i=0; 
      for(int z=0;z<6;z++) 
      { 
        bytes[counter++]= 
         byte.Parse(MAC_ADDRESS.Substring(i,2), 
         NumberStyles.HexNumber); 
        i+=2; 
      } 
     } 

     int reterned_value=client.Send(bytes,1024); 
    } 
} 

코드는 내가 깨어하려는 컴퓨터와 같은 가상 네트워크에있는 컴퓨터에서 실행하면 잘 작동하지만 컴퓨터가있는 경우 작동하지 않습니다 다른 가상 네트워크에서. 왜 어떤 아이디어를 고쳐야합니까?

덕분 가즈

답변

2

매직 패킷은 계층 2 개 패킷이고 그래서 크로스 라우터 (레이어 3 개)의 경계를하지 않는다.

수정 방법은 무엇입니까? 송신기와 수신기를 동일한 브로드 캐스트 도메인에 두십시오. 이 경우 동일한 가상 네트워크에 있습니다.

+0

IPAddress는 0xffffffff 이명 255.255.255.255이며 이러한 브로드 캐스트는 동일한 서브넷 내에서만 전송됩니다. – Oliver

+0

다른 게시판 도메인의 컴퓨터에 마법 패킷을 보낼 수있는 방법이 있습니까? – Gaz

+0

IP 네트워크를 가정하십시오. 잠자기 컴퓨터의 포트로 패킷을 가져와야합니다. 자고 있기 때문에 해당 네트워크의 라우터에 현재 ARP 테이블 항목 (IP 대 MAC 매핑)이 없다고 가정해야합니다. 그러면 깨어있을 때 IP 주소로 보낼 수 없습니다. 따라서 대상 네트워크에서 브로드 캐스트해야합니다. 그렇게하려면 직접 방송을해야합니다 (예 : 10.116.10.x에서 10.116.11.255로 전송). 이것의 문제점은 그것이 보안 구멍이고 정확하게 구성된 라우터가 그 패킷을 버리는 것입니다. – janm

관련 문제