Esempio n. 1
0
        private void SendRTPPacket(string sourceSocket, string destinationSocket)
        {
            try
            {
                //logger.Debug("Attempting to send RTP packet from " + sourceSocket + " to " + destinationSocket + ".");
                Log("Attempting to send RTP packet from " + sourceSocket + " to " + destinationSocket + ".");

                IPEndPoint sourceEP = IPSocket.GetIPEndPoint(sourceSocket);
                IPEndPoint destEP   = IPSocket.GetIPEndPoint(destinationSocket);

                RTPPacket rtpPacket = new RTPPacket(80);
                rtpPacket.Header.SequenceNumber = (UInt16)6500;
                rtpPacket.Header.Timestamp      = 100000;

                UDPPacket  udpPacket = new UDPPacket(sourceEP.Port, destEP.Port, rtpPacket.GetBytes());
                IPv4Header ipHeader  = new IPv4Header(ProtocolType.Udp, Crypto.GetRandomInt(6), sourceEP.Address, destEP.Address);
                IPv4Packet ipPacket  = new IPv4Packet(ipHeader, udpPacket.GetBytes());

                byte[] data = ipPacket.GetBytes();

                Socket rawSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
                rawSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);

                rawSocket.SendTo(data, destEP);
            }
            catch (Exception excp)
            {
                logger.Error("Exception SendRTPPacket. " + excp.Message);
            }
        }
Esempio n. 2
0
        public byte[] GetBytes()
        {
            if (ICMP != null)
            {
                Protocol = 1; PacketData = ICMP.GetBytes();
            }
            if (TCP != null)
            {
                Protocol = 6; PacketData = TCP.GetBytes(ref SourceAddress, ref DestinationAddress);
            }
            if (UDP != null)
            {
                Protocol = 17; PacketData = UDP.GetBytes(ref SourceAddress, ref DestinationAddress);
            }

            if (PacketData == null)
            {
                PacketData = new byte[0];
            }
            if (Version == 0)
            {
                Version = 4;
            }
            if (HeaderLength == 0)
            {
                HeaderLength = 20;
            }
            TotalLength = (ushort)(HeaderLength + PacketData.Length);
            byte[] Packet = new byte[TotalLength];
            if (TimeToLive == 0)
            {
                TimeToLive = 128;
            }
            Packet[0] = (byte)(((Version & 0x0F) << 4) | ((HeaderLength / 4) & 0x0F));
            Packet[1] = TypeOfService;
            System.Buffer.BlockCopy(System.BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder((short)TotalLength)), 0, Packet, 2, 2);
            System.Buffer.BlockCopy(System.BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder((short)Identification)), 0, Packet, 4, 2);
            System.Buffer.BlockCopy(System.BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder((short)((FragmentOffset & 0x1F) | ((Flags & 0x03) << 13)))), 0, Packet, 6, 2);
            Packet[8] = TimeToLive;
            Packet[9] = Protocol;
            System.Buffer.BlockCopy(System.BitConverter.GetBytes((short)0), 0, Packet, 10, 2);
            System.Buffer.BlockCopy(SourceAddress.GetAddressBytes(), 0, Packet, 12, 4);
            System.Buffer.BlockCopy(DestinationAddress.GetAddressBytes(), 0, Packet, 16, 4);
            System.Buffer.BlockCopy(PacketData, 0, Packet, HeaderLength, PacketData.Length);
            HeaderChecksum = GetChecksum(ref Packet, 0, HeaderLength - 1);
            System.Buffer.BlockCopy(System.BitConverter.GetBytes(System.Net.IPAddress.HostToNetworkOrder((short)HeaderChecksum)), 0, Packet, 10, 2);
            return(Packet);
        }
Esempio n. 3
0
        public void SendRTPPacket(string sourceSocket, string destinationSocket)
        {
            try
            {
                //logger.Debug("Attempting to send RTP packet from " + sourceSocket + " to " + destinationSocket + ".");
                FireLogEvent("Attempting to send RTP packet from " + sourceSocket + " to " + destinationSocket + ".");
                
                IPEndPoint sourceEP = IPSocket.GetIPEndPoint(sourceSocket);
                IPEndPoint destEP = IPSocket.GetIPEndPoint(destinationSocket);

                RTPPacket rtpPacket = new RTPPacket(80);
                rtpPacket.Header.SequenceNumber = (UInt16)6500;
                rtpPacket.Header.Timestamp = 100000;

                UDPPacket udpPacket = new UDPPacket(sourceEP.Port, destEP.Port, rtpPacket.GetBytes());
                IPv4Header ipHeader = new IPv4Header(ProtocolType.Udp, Crypto.GetRandomInt(6), sourceEP.Address, destEP.Address);
                IPv4Packet ipPacket = new IPv4Packet(ipHeader, udpPacket.GetBytes());

                byte[] data = ipPacket.GetBytes();

                Socket rawSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
                rawSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);

                rawSocket.SendTo(data, destEP);
            }
            catch (Exception excp)
            {
                logger.Error("Exception SendRTPPacket. " + excp.Message);
            }
        }