2010-02-18 6 views
7

मुझे एक मशीन का आईपी निर्धारित करने की आवश्यकता है जिसने मुझे एक मल्टीकास्ट पैकेट भेजा है, ताकि मैं यूनिकास्ट के माध्यम से इसका जवाब दे सकूं।मैं सी # में मल्टीकास्ट पैकेट के स्रोत आईपी को कैसे निर्धारित करूं?

मैं (कोड संक्षिप्तता के लिए संपादित किया गया है, त्रुटि जाँच और अप्रासंगिक विकल्प निकाले जाने के साथ) एक बहुस्त्र्पीय कनेक्शन पर पैकेट प्राप्त करने के लिए निम्न कोई तिथि नहीं (नेट 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); 

और यहाँ कॉलबैक, जहां मैं स्रोत आईपी प्राप्त करने के लिए कोशिश कर रहा हूँ है:

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 हेडर में है, के बाद से मैं स्पष्ट रूप से यह वहाँ देख सकते हैं जब मैं wireshark में पैकेट सूंघ पता है। हालांकि, प्रेषण प्रणाली (1 9 2.168.3.4) के आईपी को मुद्रित करने के बजाय, उपर्युक्त कोड मल्टीकास्ट समूह के आईपी को प्रिंट करता है जिसे मैंने सदस्यता लिया है (225.2.2.6)। इसके बजाय स्रोत आईपी प्राप्त करने का कोई तरीका है?

उत्तर

3

आपके उत्तर को LocalEndPoint चर में नहीं है, जो पैकेट के स्रोत का एंडपॉइंट है, यानी, दूसरे छोर पर दोस्त। ध्यान दें कि मैं शायद इस चरम नाम को "रिमोटईपी" जैसे नाम दूंगा, और भ्रम से बचने के लिए इसे गैर विशिष्ट के लिए प्रारंभ कर दूंगा।

+0

हां। हाँ यही है। मुझे इसे प्राप्त करने के लिए इसे आईपीईंडपॉइंट पर डालना पड़ा। धन्यवाद। –

+0

ग्रेट; एकमात्र कारण मुझे यकीन नहीं था क्योंकि मैंने पहले मल्टीकास्ट समूहों के साथ काम नहीं किया था - मेरे लिए कुछ सीखना! – Bill

संबंधित मुद्दे