2011-09-20 3 views
5

네트워크에서 장치 검색을 위해 IP 주소 "255.255.255.255"에서 UDP 브로드 캐스트를 보내려고합니다. 프로그램이 실행되지만 Wireshark에서는 아무 것도 볼 수 없습니다. 네트워크에서 알려진 IP 주소로 IP 주소를 변경하면 Wireshark에서 패킷을 볼 수 있습니다. 무슨 일이야 ?Java에서 UDP 브로드 캐스트가 작동하지 않습니다.

이 내 코드입니다 :

public static void main(String args[]) throws Exception 
{ 
    String Broadcastaddress = new String("255.255.255.255"); 
    int port = 9876; 
    DatagramSocket serverSocket = new DatagramSocket(); 
    serverSocket.setBroadcast(true); 
    InetAddress IPAddress = InetAddress.getByName(Broadcastaddress); 
    System.out.println("Sending Discovery message to " + IPAddress + "Via UDP port " + port); 

    byte[] sendData = new byte[4]; 
    sendData[0] = 'F'; 
    sendData[1] = 'I'; 
    sendData[2] = 'N'; 
    sendData[3] = 'D'; 

    DatagramPacket sendPacket = new DatagramPacket(sendData,sendData.length,IPAddress,port); 

    while (true) 
    { 
     serverSocket.send(sendPacket); 
     System.out.println("Packet sent"); 
    } 


} 

답변

4

OK, 나는 대답을 발견했다. Windows 7은 더 이상 255.255.255.255 브로드 캐스트를 지원하지 않지만 다양한 위협에 노출 된 것 같습니다. 방송하려면 다른 접근 방식을 사용해야합니다.

는 IPv4 호스트 브로드 캐스트 주소는 서브넷 마스크의 비트의 보수와 호스트의 IP 주소 사이의 비트 단위 논리 OR 연산을 수행함으로써 얻어 질 수있다 :

이것은 위키에서 작은 explenation이다. 예 : 서브넷 마스크 255.240.0.0을 가진 사설 IP 주소 공간 100.16.0.0/12를 사용하여 전체 IPv4 서브넷에 패킷을 브로드 캐스트하려면 브로드 캐스트 주소는 100.16.0.0 | 0.15.255.255 = 100.31.255.255.

IP 브로드 캐스트 주소 255.255.255.255에 대해 특별한 정의가 있습니다. 이것은 제로 네트워크 또는 0.0.0.0의 브로드 캐스트 어드레스이며, 이는 인터넷 프로토콜 표준에서이 네트워크, 즉 로컬 네트워크를 나타낸다. 이 주소로의 전송은 로컬 네트워크를 인터넷에 연결하는 라우터에 의해 절대로 전달되지 않으므로 정의에 의해 제한됩니다.

관련 문제