2010-02-18 29 views
7

我需要確定一臺發送了多播數據包的機器的IP,以便我可以通過單播對其進行響應。如何確定C#中多播數據包的源IP?

我使用以下CSHARP(.NET 3.5)代碼通過多播連接接收數據包(代碼已經被編輯爲簡潔起見,去掉錯誤檢查和無關選項):

IPEndPoint LocalHostIPEnd = new IPEndPoint(IPAddress.Any, 8623); 
Socket UDPSocket = new Socket(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp); 
UDPSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.MulticastLoopback, 1); 

UDPSocket.Bind(LocalHostIPEnd); 

//Join the multicast group 
UDPSocket.SetSocketOption(
    SocketOptionLevel.IP, 
    SocketOptionName.AddMembership, 
    new MulticastOption(IPAddress.Parse("225.2.2.6"))); 

IPEndPoint LocalIPEndPoint = new IPEndPoint(IPAddress.Any ,Target_Port); 
EndPoint LocalEndPoint = (EndPoint)LocalIPEndPoint; 

// Create the state object. 
StateObject state = new StateObject(); 
state.buffer.Initialize(); 
state.workSocket = UDPSocket; 
state.id = "state0"; 
//Set up my callback 
UDPSocket.BeginReceiveMessageFrom(
    state.buffer, 
    0, 
    StateObject.BufferSize, 
    0, 
    ref LocalEndPoint, 
    new AsyncCallback(ReceiveCallback), 
    state); 

而且這裏的回調,在那裏我試圖獲取源IP:

private void ReceiveCallback(IAsyncResult ar) 
{ 
    IPEndPoint LocalIPEndPoint = new IPEndPoint(IPAddress.Any, Target_Port); 
    EndPoint LocalEndPoint = (EndPoint)LocalIPEndPoint; 

    // Read data from the remote device. 
    // The following code attempts to determine the IP of the sender, 
    // but instead gets the IP of the multicast group. 
    SocketFlags sFlags = new SocketFlags(); 
    IPPacketInformation ipInf = new IPPacketInformation(); 

    int bytesRead = client.EndReceiveMessageFrom(ar, ref sFlags, 
     ref LocalEndPoint, out ipInf); 

    log.Warn("Got address: " + ipInf.Address.ToString()); 
} 

我知道正確的源IP是在IP報頭,因爲我可以清楚地看到它在那裏當我在Wireshark的嗅探包。但是,不是打印出發送系統的IP(192.168.3.4),而是打印出我訂閱的組播組的IP(225.2.2.6)。有沒有辦法獲得源IP?

回答

3

是不是您在LocalEndPoint變量中的答案,它是數據包源的EndPoint,即另一端的夥計。請注意,我可能會重命名該變量,如「remoteEP」,並將其初始化爲非特定的內容以避免混淆。

+0

是的。是的。 我只需將它轉換爲IPEndPoint就可以了。謝謝。 – 2010-02-18 21:04:01

+0

太棒了;我不確定的唯一原因是因爲我之前沒有使用過多播組 - 這是我需要了解的東西! – Bill 2010-02-18 22:58:45

相關問題