コード例 #1
0
        // set the checksum field
        // offset points to the beginning of the IP header (!!!)
        // Should be called after the TCP header + data have been written
        public static void SetTcpChecksum(byte[] !packet,
                                          int ipOffset,
                                          ref TcpHeader tcpHeader)
        {
            // sum IP pseudo
            ushort ipPayloadLength = 0;
            ushort headerSum       =
                IPFormat.SumPseudoHeader(packet, ipOffset,
                                         ref ipPayloadLength);

            int ipHeaderSize = (packet[ipOffset] & 0xf) * 4;
            int tcpOffset    = ipOffset + ipHeaderSize;

            Debug.Assert(packet[tcpOffset + 16] == 0);
            Debug.Assert(packet[tcpOffset + 17] == 0);

            // now add it to the TCP header + data
            ushort payloadSum = IPFormat.SumShortValues(packet, tcpOffset,
                                                        ipPayloadLength);

            tcpHeader.checksum = (ushort)
                                 ~(IPFormat.SumShortValues(headerSum, payloadSum));

            // Complement and change +0 to -0 if needed.
            ushort tcpChecksum = IPFormat.ComplementAndFixZeroChecksum(
                (IPFormat.SumShortValues(headerSum, payloadSum)));

            tcpHeader.checksum = tcpChecksum;

            unchecked {
                packet[tcpOffset + 16] = (byte)(tcpChecksum >> 8);
                packet[tcpOffset + 17] = (byte)(tcpChecksum >> 0);
            }
        }
コード例 #2
0
ファイル: profileForm.cs プロジェクト: qhrrkfl2/KAKAO
            void getData(NetworkStream stream)
            {
                if (m_emptySpace < 512)
                {
                    byte[] expand = new byte[m_size * 2];
                    for (int i = 0; i < m_size; i++)
                    {
                        expand[i] = m_field[i];
                    }
                    m_field = expand;
                    m_size  = m_size * 2;
                }
                else
                {
                    int transbyte;
                    int cnt = this.getdatalength();

                    while (cnt < 8)
                    {
                        transbyte = stream.Read(m_field, m_front + 1, this.getfieldmaxaddress());
                        cnt      += transbyte;
                        addData(transbyte);
                    }
                    TcpHeader head = this.getheader();
                    while (head.msgsize < cnt)
                    {
                        transbyte = stream.Read(m_field, m_front + 1, this.getfieldmaxaddress());
                        cnt      += transbyte;
                        addData(transbyte);
                    }
                }
            }
コード例 #3
0
        void rec(byte[] data, int length)
        {
            IPHeader ipHeader = new IPHeader(data, length);
            IPacket  packet   = ipHeader.ParseData();

            if (OnPacket != null)
            {
                OnPacket(ipHeader.ProtocolType, packet);
            }

            if (OnTcpStream != null && ipHeader.ProtocolType == ProtocolType.Tcp)
            {
                TcpHeader tcp = (TcpHeader)packet;

                if (AllowTcpPacket(tcp))
                {
                    TcpStream stream = TcpStream.GetStream(_TcpStreams, tcp);
                    if (stream != null)
                    {
                        if (stream.IsClossed)
                        {
                            _TcpStreams.Remove(stream);
                        }
                        OnTcpStream(stream);
                    }
                }
            }

            Receive();
        }
コード例 #4
0
ファイル: Message.cs プロジェクト: usamabintariq/NCache
        public void SerializeLocal(BinaryWriter writer)
        {
            //Check in sequence of headers..
            FlagsByte bFlags = new FlagsByte();

            if (IsUserMsg)
            {
                bFlags.SetOn(FlagsByte.Flag.TRANS);
            }

            object tmpHdr;

            tmpHdr = (Header)headers[(object)(HeaderType.REQUEST_COORELATOR)];
            if (tmpHdr != null)
            {
                RequestCorrelator.HDR corHdr = (RequestCorrelator.HDR)tmpHdr;
                corHdr.SerializeLocal(writer);
                bFlags.SetOn(FlagsByte.Flag.COR);
            }

            tmpHdr = (Header)headers[(object)(HeaderType.TOTAL)];
            if (tmpHdr != null)
            {
                TOTAL.HDR totalHdr = (TOTAL.HDR)tmpHdr;
                totalHdr.SerializeLocal(writer);
                bFlags.SetOn(FlagsByte.Flag.TOTAL);
            }

            tmpHdr = (Header)headers[(object)(HeaderType.TCP)];
            if (tmpHdr != null)
            {
                TcpHeader tcpHdr = (TcpHeader)tmpHdr;
                tcpHdr.SerializeLocal(writer);
                bFlags.SetOn(FlagsByte.Flag.TCP);
            }

            writer.Write(Convert.ToInt16(prio));
            writer.Write(handledAsynchronously);
            writer.Write(arrivalTime.Ticks);
            writer.Write(sendTime.Ticks);
            writer.Write(responseExpected);
            writer.Write(_type);
            if (stream != null)
            {
                writer.Write(length);
                writer.Write(((MemoryStream)stream).GetBuffer(), 0, length);
            }
            else
            {
                int length = buf.Length;
                writer.Write(length);
                writer.Write(buf);
            }
            long curPos = writer.BaseStream.Position;

            writer.BaseStream.Position = 8;             //afte 4 bytes of total size and 4 bytes of message size ..here comes the flag.
            writer.Write(bFlags.DataByte);
            writer.BaseStream.Position = curPos;
        }
コード例 #5
0
ファイル: Program.cs プロジェクト: qhrrkfl2/KAKAO
        static void setHeader(TcpHeader head, Byte[] buff)
        {
            IntPtr ptr = Marshal.AllocHGlobal(8);

            Marshal.StructureToPtr(head, ptr, true);
            Marshal.Copy(ptr, buff, 0, 8);
            Marshal.FreeHGlobal(ptr);
        }
コード例 #6
0
ファイル: profileForm.cs プロジェクト: qhrrkfl2/KAKAO
            public TcpHeader getheader()
            {
                IntPtr ptr = Marshal.AllocHGlobal(m_headsize);

                Marshal.Copy(m_field, m_rear + 1, ptr, m_headsize);
                TcpHeader head = (TcpHeader)Marshal.PtrToStructure(ptr, typeof(TcpHeader));

                Marshal.FreeHGlobal(ptr);
                return(head);
            }
コード例 #7
0
ファイル: Program.cs プロジェクト: qhrrkfl2/KAKAO
        static public TcpHeader getheader(byte[] buff, int headsize)
        {
            IntPtr ptr = Marshal.AllocHGlobal(headsize);

            Marshal.Copy(buff, 0, ptr, headsize);
            TcpHeader head = (TcpHeader)Marshal.PtrToStructure(ptr, typeof(TcpHeader));

            Marshal.FreeHGlobal(ptr);
            return(head);
        }
コード例 #8
0
        public static bool IsChecksumValid(IPFormat.IPHeader !ipHeader,
                                           TcpHeader tcpHeader,
                                           NetPacket !payload)
        {
            // Compute partial checksums of headers
            ushort checksum = IPFormat.SumPseudoHeader(ipHeader);

            checksum = IPFormat.SumShortValues(checksum,
                                               SumHeader(tcpHeader));

            // Checksum payload (without potential odd byte)
            int  length          = payload.Available;
            int  end             = length & ~1;
            int  i               = 0;
            uint payloadChecksum = 0;

            while (i != end)
            {
                byte b0 = payload.PeekAvailable(i++);
                byte b1 = payload.PeekAvailable(i++);
                payloadChecksum += ((((uint)b0) << 8) + (uint)b1);
            }

            // Handle odd byte.
            if (i != length)
            {
                payloadChecksum += (((uint)payload.PeekAvailable(i++)) << 8);
            }

            // Merge bits from payload checksum
            checksum = IPFormat.SumUInt16AndUInt32Values(checksum, payloadChecksum);

            // Complement and change +0 to -0 if needed.
            checksum = IPFormat.ComplementAndFixZeroChecksum(checksum);

            // Check for match.
            bool checksumMatch = (tcpHeader.checksum == checksum);

            // If checksum error, unconditionally output message to debugger.
            if (checksumMatch == false)
            {
                DebugStub.WriteLine("Bad TCP checksum {0:x4} != {1:x4}:  SEQ {2:x8}  ACK {3:x8}",
                                    __arglist(tcpHeader.checksum, checksum,
                                              tcpHeader.seq,
                                              tcpHeader.ackSeq
                                              ));
            }

            // IsValid is a Match.
            return(checksumMatch);
        }
コード例 #9
0
        void btn_join_Clicked(object sender, EventArgs arg)
        {
            // 띄어쓰기 등등 체크해야함.
            if (tb_Password.Text != tb_chkPassword.Text)
            {
                MessageBox.Show("비밀번호 확인 다시하세요", "비번체크");
            }
            else
            {
                // 서버에 정보를 보낸후,

                TcpClient tc   = new TcpClient("127.0.0.1", 7000);
                string    msg  = tb_ID.Text + " " + tb_Password.Text;
                byte[]    bMsg = Encoding.Unicode.GetBytes(msg);
                TcpHeader head = new TcpHeader();
                head.mode    = 1;
                head.msgsize = (uint)szHeader + (uint)bMsg.Length;
                ByteField joinInfo = new ByteField(256);
                joinInfo.setHeader(head);
                joinInfo.ConcStrAfterHead(bMsg);

                NetworkStream stream = tc.GetStream();
                stream.Write(joinInfo.m_field, 0, joinInfo.m_size);



                int       cnt         = 0;
                ByteField msgFromServ = new ByteField(bytesize);
                // 헤더수신보장
                cnt += stream.Read(msgFromServ.m_field, 0, bytesize - cnt);
                while (cnt <= 8)
                {
                    cnt += stream.Read(msgFromServ.m_field, cnt, bytesize - cnt);
                }

                int msgze = (int)msgFromServ.getheader().msgsize;

                while (cnt <= msgze)
                {
                    cnt += stream.Read(msgFromServ.m_field, cnt, bytesize - cnt);
                }

                MessageBox.Show(msgFromServ.getMsgStr());


                tc.Close();
                stream.Close();
            }
            this.Dispose(true);
        }
コード例 #10
0
 public BtcHeader(TcpHeader tcpHeader)
 {
     TcpHeader = tcpHeader;
     using (var memr = new MemoryStream(tcpHeader.Data.Array, tcpHeader.Data.Offset, tcpHeader.Data.Count))
     {
         using (var reader = new BinaryReader(memr))
         {
             Magic    = reader.ReadUInt32();
             Command  = new String(reader.ReadChars(12));
             Length   = reader.ReadUInt32();
             Checksum = reader.ReadUInt32();
             Payload  = new ArraySegment <byte>(tcpHeader.Data.Array, tcpHeader.Data.Offset + 24, (int)Length);
         }
     }
 }
コード例 #11
0
 bool AllowTcpPacket(TcpHeader tcp)
 {
     if (_Filters == null)
     {
         return(true);
     }
     foreach (ITcpStreamFilter filter in _Filters)
     {
         if (!filter.IsAllowed(tcp))
         {
             return(false);
         }
     }
     return(true);
 }
コード例 #12
0
ファイル: Program.cs プロジェクト: qhrrkfl2/KAKAO
        static void getMSG(int headsize, NetworkStream stream, Byte[] buff, int buffsize)
        {
            int cnt = 0;

            while (cnt < 8)
            {
                cnt += stream.Read(buff, cnt, buffsize - cnt);
            }
            TcpHeader head = getheader(buff, headsize);

            while (cnt >= head.msgsize)
            {
                cnt += stream.Read(buff, cnt, buffsize - cnt);
            }
        }
コード例 #13
0
ファイル: SnifferTorFilter.cs プロジェクト: santatic/Xploit
        public bool IsAllowed(TcpHeader packet)
        {
            TorHelper.UpdateTorExitNodeList(true);

            if (TorHelper.IsTorExitNode(packet.IpHeader.DestinationAddress))
            {
                return(true);
            }
            if (TorHelper.IsTorExitNode(packet.IpHeader.SourceAddress))
            {
                return(true);
            }

            return(false);
        }
コード例 #14
0
ファイル: TcpStream.cs プロジェクト: zhuyue1314/Xploit
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="packet">Packet</param>
        public TcpStream(TcpHeader packet)
        {
            if (packet != null)
            {
                _DestinationPort = packet.DestinationPort;
                _SourcePort      = packet.SourcePort;

                _DestinationAddress = packet.IpHeader.DestinationAddress;
                _SourceAddress      = packet.IpHeader.SourceAddress;

                Add(packet);
            }
            else
            {
                _IsClossed = true;
            }
        }
コード例 #15
0
        // construct a TCP header from a packet
        // if something is wrong, return the same start value
        public static bool ReadTcpHeader(IBuffer !buf, out TcpHeader tcphdr)
        {
            // initialize an TcpHeader struct
            tcphdr = new TcpHeader();

            bool b;

            b  = buf.ReadNet16(out tcphdr.sourcePort);
            b &= buf.ReadNet16(out tcphdr.destPort);
            b &= buf.ReadNet32(out tcphdr.seq);
            b &= buf.ReadNet32(out tcphdr.ackSeq);
            b &= buf.Read8(out tcphdr.off_res1);
            b &= buf.Read8(out tcphdr.res2_flags);
            b &= buf.ReadNet16(out tcphdr.window);
            b &= buf.ReadNet16(out tcphdr.checksum);
            b &= buf.ReadNet16(out tcphdr.urgPtr);
            return(b);
        }
コード例 #16
0
 private void AppendTCPInfo(TcpHeader tcpHeader, StringBuilder retVal)
 {
     //retVal.Append("[*TCP* ");
     //retVal.AppendFormat("SNo:{0}, " , tcpHeader.SequenceNumber);
     //if (tcpHeader.AcknowledgementNumber != "")
     //{
     //    retVal.AppendFormat("AckNo:{0} ,", tcpHeader.AcknowledgementNumber);
     //}
     //retVal.AppendFormat("HLen:{0}, " , tcpHeader.HeaderLength);
     //retVal.AppendFormat("Flags:{0}, " , tcpHeader.Flags);
     //retVal.AppendFormat("WSize:{0}, " , tcpHeader.WindowSize);
     //if (tcpHeader.UrgentPointer != "")
     //{
     //retVal.AppendFormat("UPtr:{0}, ", tcpHeader.UrgentPointer);
     //}
     //retVal.AppendFormat("Checksum:{0}" , tcpHeader.Checksum);
     //retVal.Append("]");
 }
コード例 #17
0
        public static ushort SumHeader(TcpHeader tcpHeader)
        {
            int checksum = tcpHeader.sourcePort;

            checksum += tcpHeader.destPort;
            checksum += (int)(tcpHeader.seq >> 16);
            checksum += (int)(tcpHeader.seq & 0xffff);
            checksum += (int)(tcpHeader.ackSeq >> 16);
            checksum += (int)(tcpHeader.ackSeq & 0xffff);
            checksum += (((int)tcpHeader.off_res1) << 8) | (int)tcpHeader.res2_flags;
            checksum += (int)tcpHeader.window;
            checksum += (int)tcpHeader.urgPtr;

            // Double-wrap checksum
            checksum = (checksum & 0xFFFF) + (checksum >> 16);
            checksum = (checksum & 0xFFFF) + (checksum >> 16);
            return((ushort)checksum);
        }
コード例 #18
0
ファイル: Message.cs プロジェクト: usamabintariq/NCache
        public void DeserializeLocal(BinaryReader reader)
        {
            isUserMsg = true;
            reader.BaseStream.Position = 0;
            byte      flags  = reader.ReadByte();
            FlagsByte bFlags = new FlagsByte();

            bFlags.DataByte = flags;
            //Headers are in sequence 1. COR  2. TOTAL 3. TCP
            headers = new Hashtable();
            if (bFlags.AnyOn(FlagsByte.Flag.COR))
            {
                RequestCorrelator.HDR corHdr = new RequestCorrelator.HDR();
                corHdr.DeserializeLocal(reader);
                headers.Add(HeaderType.REQUEST_COORELATOR, corHdr);
            }

            if (bFlags.AnyOn(FlagsByte.Flag.TOTAL))
            {
                TOTAL.HDR totalHdr = new TOTAL.HDR();
                totalHdr.DeserializeLocal(reader);
                headers.Add(HeaderType.TOTAL, totalHdr);
            }

            if (bFlags.AnyOn(FlagsByte.Flag.TCP))
            {
                TcpHeader tcpHdr = new TcpHeader();
                tcpHdr.DeserializeLocal(reader);
                headers.Add(HeaderType.TCP, tcpHdr);
            }

            prio = (Priority)Enum.ToObject(typeof(Priority), reader.ReadInt16());
            handledAsynchronously = reader.ReadBoolean();
            long ticks = reader.ReadInt64();

            arrivalTime      = new DateTime(ticks);
            ticks            = reader.ReadInt64();
            sendTime         = new DateTime(ticks);
            responseExpected = reader.ReadBoolean();
            _type            = reader.ReadByte();

            length = reader.ReadInt32();
            buf    = (byte[])reader.ReadBytes(length);
        }
コード例 #19
0
        static void Main(string[] args)
        {
            var pcap = new Pcap();

            pcap.Open(ConfigurationManager.AppSettings["Adapter"]);

            var address = IPAddress.Parse(ConfigurationManager.AppSettings["Address"]);
            var port    = UInt16.Parse(ConfigurationManager.AppSettings["Port"]);

            Packet packet = null;

            long tx = 0, rx = 0;

            while (true)
            {
                if ((packet = pcap.Next()) != null)
                {
                    var eth = new EthernetHeader(packet.Data);
                    if (eth.Protocol == (int)EthernetProtocol.IP)
                    {
                        var ip = new IPHeader(eth);
                        if (ip.Protocol == IPProtocol.Tcp)
                        {
                            var tcp = new TcpHeader(ip);
                            if (ip.SourceIp.Equals(address) && tcp.SourcePort == port)
                            {
                                rx += tcp.Length;
                            }
                            else if (ip.DestinationIp.Equals(address) && tcp.DestinationPort == port)
                            {
                                tx += tcp.Length;
                            }
                        }
                    }
                }

                if (KeyPressed())
                {
                    Console.WriteLine("{0},{1}", tx, rx);
                    tx = 0;
                    rx = 0;
                }
            }
        }
コード例 #20
0
ファイル: profileForm.cs プロジェクト: qhrrkfl2/KAKAO
        public void initData(string id, TcpClient tcp, string friendlist)
        {
            // 이것이 call되는 시점은 생성자call된 이후 시점.
            myId       = id;
            connection = tcp;
            stream     = tcp.GetStream();
            int idx = 0;
            int cnt = 0;

            while (true)
            {
                idx = friendlist.IndexOf(' ');
                if (idx == -1)
                {
                    break;
                }
                string name = friendlist.Substring(0, idx);
                friendlist = friendlist.Substring(idx);
                friendlist = friendlist.TrimStart(' ');
                BtnChatMemManager.getInstance().dicProfileList.Add(name, new ProFileEX(new Size(300, 50), new Point(0, 50 * cnt + 1), name, this));
                // this.Size = new Size(300, 500);
                //lstCprofile.Add(new ProFileEX(new Size(300,50), new Point(0, 0), "정으니",this));
                cnt++;
            }

            ByteField requestPendingMSg = new ByteField(8);

            TcpHeader head = new TcpHeader();

            head.mode    = 400;
            head.msgsize = 8;

            requestPendingMSg.setHeader(head);
            stream.Write(requestPendingMSg.m_field, 0, 8);

            Thread recv = new Thread(new ThreadStart(takeMsgFromServ));
            Thread send = new Thread(new ThreadStart(sendMsgToServ));

            recv.Start();
            send.Start();
            //test
        }
コード例 #21
0
        // writes a TCP header to a packet
        // return the next place to write to
        // the checksum must be later calculated and cover the
        // pseudoheader and entire TCP segment
        public static int WriteTcpHeader(byte[] !pkt, int offset, ref TcpHeader hdr)
        {
            // check we have enough packet space
            if (pkt.Length - offset < Size)
            {
                return(offset);
            }

            int o = offset;

            pkt[o++] = (byte)(((ushort)hdr.sourcePort) >> 8);
            pkt[o++] = (byte)(((ushort)hdr.sourcePort) & 0xff);

            pkt[o++] = (byte)(((ushort)hdr.destPort) >> 8);
            pkt[o++] = (byte)(((ushort)hdr.destPort) & 0xff);

            pkt[o++] = (byte)(((uint)hdr.seq) >> 24);
            pkt[o++] = (byte)(((uint)hdr.seq) >> 16);
            pkt[o++] = (byte)(((uint)hdr.seq) >> 8);
            pkt[o++] = (byte)(((uint)hdr.seq) & 0xff);

            pkt[o++] = (byte)(((uint)hdr.ackSeq) >> 24);
            pkt[o++] = (byte)(((uint)hdr.ackSeq) >> 16);
            pkt[o++] = (byte)(((uint)hdr.ackSeq) >> 8);
            pkt[o++] = (byte)(((uint)hdr.ackSeq) & 0xff);

            pkt[o++] = hdr.off_res1;
            pkt[o++] = hdr.res2_flags;

            pkt[o++] = (byte)(((ushort)hdr.window) >> 8);
            pkt[o++] = (byte)(((ushort)hdr.window) & 0xff);

            // checksum
            pkt[o++] = 0;
            pkt[o++] = 0;

            pkt[o++] = (byte)(((ushort)hdr.urgPtr) >> 8);
            pkt[o++] = (byte)(((ushort)hdr.urgPtr) & 0xff);

            return(o);
        }
コード例 #22
0
ファイル: TcpStream.cs プロジェクト: zhuyue1314/Xploit
        public static TcpStream GetStream(List <TcpStream> streams, TcpHeader packet)
        {
            foreach (TcpStream stream in streams)
            {
                if (stream.IsSame(packet))
                {
                    stream.Add(packet);
                    return(stream);
                }
            }

            if (packet.Data.Length == 0)
            {
                return(null);
            }

            TcpStream ret = new TcpStream(packet);

            streams.Add(ret);
            return(ret);
        }
コード例 #23
0
        public TCPDisplayPacket(IpV4Header ipHeader, TcpHeader tcpHeader)
        {
            Destination     = ipHeader.DestinationAddress;
            DestinationPort = string.Format("{0} {1}", tcpHeader.DestinationPort, TCPPortLookup.GetPortName(tcpHeader.DestinationPort));
            Source          = ipHeader.SourceAddress;
            SourcePort      = string.Format("{0} {1}", tcpHeader.SourcePort, TCPPortLookup.GetPortName(tcpHeader.SourcePort));
            Type            = ipHeader.ProtocolType;
            Flags           = tcpHeader.Flags;
            SeqNumber       = tcpHeader.SequenceNumber.ToString();
            AckNumber       = tcpHeader.AcknowledgementNumber;
            StringBuilder retVal = new StringBuilder();

            if (tcpHeader.DestinationPort == 53 || tcpHeader.SourcePort == 53)
            {
                AppendDNSInfo(tcpHeader.Data, retVal);
            }
            AppendTCPInfo(tcpHeader, retVal);
            AppendIPInfo(ipHeader, retVal);
            AppendData(tcpHeader.Data, retVal);
            Data = retVal.ToString();
        }
コード例 #24
0
ファイル: TcpStream.cs プロジェクト: zhuyue1314/Xploit
        bool IsSame(TcpHeader packet)
        {
            //if (_SeqNumber != packet.SequenceNumber)
            //    return false;

            // same
            if (packet.DestinationPort == _DestinationPort && packet.SourcePort == _SourcePort &&
                IPAddress.Equals(packet.IpHeader.DestinationAddress, _DestinationAddress) &&
                IPAddress.Equals(packet.IpHeader.SourceAddress, _SourceAddress))
            {
                return(true);
            }

            // same
            if (packet.DestinationPort == _SourcePort && packet.SourcePort == _DestinationPort &&
                IPAddress.Equals(packet.IpHeader.DestinationAddress, _SourceAddress) &&
                IPAddress.Equals(packet.IpHeader.DestinationAddress, _SourceAddress))
            {
                return(true);
            }

            return(false);
        }
コード例 #25
0
ファイル: TcpStream.cs プロジェクト: zhuyue1314/Xploit
        void Add(TcpHeader packet)
        {
            if (packet.Flags.HasFlag(ETcpFlags.Fin))
            {
                _IsClossed = true;
            }

            if (packet.Data.Length <= 0)
            {
                return;
            }

            ETcpEmisor emisor =
                (packet.DestinationPort == _DestinationPort && IPAddress.Equals(packet.IpHeader.DestinationAddress, _DestinationAddress) &&
                 packet.SourcePort == _SourcePort && IPAddress.Equals(packet.IpHeader.SourceAddress, _SourceAddress)) ? ETcpEmisor.A : ETcpEmisor.B;

            if (_Last == null)
            {
                _Last = new TcpStreamMessage(packet.Data, emisor);
                _InternalList.Add(_Last);
            }
            else
            {
                // Check if its the same
                if (_Last.Emisor == emisor)
                {
                    _Last.AddData(packet.Data);
                }
                else
                {
                    // New Packet
                    _Last = new TcpStreamMessage(packet.Data, emisor);
                    _InternalList.Add(_Last);
                }
            }
        }
コード例 #26
0
ファイル: SnifferPortFilter.cs プロジェクト: santatic/Xploit
 public bool IsAllowed(TcpHeader packet)
 {
     return(packet.DestinationPort == Port || packet.SourcePort == Port);
 }
コード例 #27
0
                public void run()
                {
                    while (true)
                    {
                        try {
                            Packet         packet     = packetList.take();
                            EthernetPacket packet_eth = (EthernetPacket)packet;
                            EthernetHeader head_eth   = packet_eth.getHeader();

                            IpV4Packet ipV4Packet = null;
                            if (ppp)
                            {
                                ipV4Packet = getIpV4Packet_pppoe(packet_eth);
                            }
                            else
                            {
                                if (packet_eth.getPayload() instanceof IpV4Packet)
                                {
                                    ipV4Packet = (IpV4Packet)packet_eth.getPayload();
                                }
                            }
                            if (ipV4Packet != null)
                            {
                                IpV4Header ipV4Header = ipV4Packet.getHeader();
                                if (ipV4Packet.getPayload() instanceof TcpPacket)
                                {
                                    TcpPacket tcpPacket = (TcpPacket)ipV4Packet.getPayload();
                                    TcpHeader tcpHeader = tcpPacket.getHeader();
                                    if (client)
                                    {
                                        TCPTun conn = tcpManager.getTcpConnection_Client(ipV4Header.getSrcAddr().getHostAddress(), tcpHeader.getSrcPort().value(), tcpHeader.getDstPort().value());
                                        if (conn != null)
                                        {
                                            conn.process_client(capEnv, packet, head_eth, ipV4Header, tcpPacket, false);
                                        }
                                    }
                                    else
                                    {
                                        TCPTun conn = null; conn = tcpManager.getTcpConnection_Server(ipV4Header.getSrcAddr().getHostAddress(), tcpHeader.getSrcPort().value());
                                        if (
                                            tcpHeader.getDstPort().value() == listenPort)
                                        {
                                            if (tcpHeader.getSyn() && !tcpHeader.getAck() && conn == null)
                                            {
                                                conn = new TCPTun(capEnv, ipV4Header.getSrcAddr(), tcpHeader.getSrcPort().value());
                                                tcpManager.addConnection_Server(conn);
                                            }
                                            conn = tcpManager.getTcpConnection_Server(ipV4Header.getSrcAddr().getHostAddress(), tcpHeader.getSrcPort().value());
                                            if (conn != null)
                                            {
                                                conn.process_server(packet, head_eth, ipV4Header, tcpPacket, true);
                                            }
                                        }
                                    }
                                }
                                else if (packet_eth.getPayload() instanceof IllegalPacket)
                                {
                                    MLog.println("IllegalPacket!!!");
                                }
                            }
                        } catch (InterruptedException e) {
コード例 #28
0
ファイル: Form1.cs プロジェクト: Xesian/CSharpSniffer
        /// <summary>
        /// 抓包
        /// </summary>
        /// <param name="s"></param>
        private void CatchPacket(Object s)
        {
            Socket ss = s as Socket;//参数转换
            byte[] buffer = new byte[2400];//接收数据的缓冲区
            while (true)
            {
                if (count > 80000)
                    break;
                int j = ss.Receive(buffer);//接收数据
                if (j > 0)//若接收到数据包
                {
                    IPHeader ipheader = new IPHeader(buffer, j);
                    ListViewItem lv = new ListViewItem();//定义一个视图项
                    count += j;//count用于统计接收的总字节数

                    lv.Text = ipheader.srcAddr.ToString();//往视图项添加源IP
                    lv.SubItems.Add(ipheader.destAddr.ToString());//往视图项添加目的IP
                    if (ipheader.protocol == 6)//6代表TCP
                    {
                            byte[] tcp = new byte[ipheader.length - ipheader.IPlength];
                            Array.Copy(buffer, ipheader.IPlength, tcp, 0, j - ipheader.IPlength);
                            TcpHeader tcpHeader = new TcpHeader(tcp, j);//解析TCP报文
                            lv.SubItems.Add(tcpHeader.sourcePort.ToString());
                            lv.SubItems.Add(tcpHeader.destinationPort.ToString());
                            lv.SubItems.Add("TCP");

                            ListViewItem tcpListView = new ListViewItem();
                            tcpListView.Text = tcpHeader.sourcePort.ToString();
                            tcpListView.SubItems.Add(tcpHeader.destinationPort.ToString());
                            tcpListView.SubItems.Add(tcpHeader.seq.ToString());
                            tcpListView.SubItems.Add(tcpHeader.ack.ToString());
                            tcpListView.SubItems.Add(tcpHeader.dataOffset.ToString());
                            tcpListView.SubItems.Add(tcpHeader.win.ToString());
                            this.listView2.Items.Add(tcpListView);
                       // if (tcpHeader.destinationPort == 80)
                       // {
                            string str = Encoding.UTF8.GetString(buffer,40,j-40);
                            this.richTextBox1.AppendText("\r\n" + str);
                      //  }
                    }
                    else if (ipheader.protocol == 17)
                    {//17代表UDP报文
                            byte[] udp = new byte[ipheader.length - ipheader.IPlength];
                            Array.Copy(buffer, ipheader.IPlength, udp, 0, j - ipheader.IPlength);
                            UdpHeader udpHeader = new UdpHeader(udp, j);//解析UDP报文
                            lv.SubItems.Add(udpHeader.sourcePort.ToString());
                            lv.SubItems.Add(udpHeader.destinationPort.ToString());
                            lv.SubItems.Add("UDP");
                    }
                    else
                    {//其他协议
                        lv.SubItems.Add(" ");
                        lv.SubItems.Add(" ");
                        lv.SubItems.Add("Others");
                    }
                    lv.SubItems.Add((ipheader.length).ToString());
                    lv.SubItems.Add(count.ToString());
                    this.listView1.Items.Add(lv);
                }
            }
        }
コード例 #29
0
        public void Execute()
        {
            Packet         packet;
            EthernetHeader eth;
            IPHeader       ip;

            Flow      key = new Flow();
            FlowStats stats;

            try {
                //BinaryReader log = new BinaryReader(new FileStream(@"c:\users\gavin\desktop\20081006.dat", FileMode.Open, FileAccess.Read));
                while (!terminated)
                {
                    try {
                        /*packet = new Packet();
                         * packet.Time = log.ReadInt64();
                         * packet.Length = log.ReadInt32();
                         * packet.Data = log.ReadBytes(log.ReadInt32());*/
                        packet = pcap.Next();
                    } catch (Exception e) {
                        packet = null;
                        throw;
                    }
                    if (packet != null)
                    {
                        if (dump != null)
                        {
                            dump.Write(packet.Time);
                            dump.Write(packet.Length);
                            int i = Math.Min(packet.Data.Length, 64);
                            dump.Write(i);
                            dump.Write(packet.Data, 0, i);
                            dump.Flush();
                        }

                        eth = new EthernetHeader(packet.Data);

                        if (eth.Protocol == (int)EthernetProtocol.IP)
                        {
                            ip = new IPHeader(eth);
                            if (ip.Protocol == IPProtocol.Tcp)
                            {
                                TcpHeader tcp = new TcpHeader(ip);
                                key = new Flow(ip, tcp);

                                stats = tracker.Resolve(key, packet.Time);

                                stats.Last = packet.Time;
                                stats.Packets++;
                                // Bytes at IP, including IP header
                                stats.Bytes += ip.Length;

                                #region debugging

                                /*
                                 * // TODO: Verify sorted order of queue - should be right now
                                 * FlowStats check = queue.Head;
                                 * while (check != null) {
                                 * if (check.Next != null) Debug.Assert(check.Last >= check.Next.Last);
                                 * check = check.Next;
                                 * }
                                 */
                                #endregion
                            }
                            else if (ip.Protocol == IPProtocol.Udp)
                            {
                                try {
                                    UdpHeader udp = new UdpHeader(ip);
                                    key = new Flow(ip, udp);

                                    stats = tracker.Resolve(key, packet.Time);

                                    stats.Last = packet.Time;
                                    stats.Packets++;
                                    // Bytes at IP, including IP header
                                    stats.Bytes += ip.Length;
                                } catch (IndexOutOfRangeException e) {
                                    using (StreamWriter errorLog = new StreamWriter(Path.Combine(LogFolder, "error.log"), true)) {
                                        errorLog.WriteLine(DateTime.Now);
                                        errorLog.WriteLine(e.Message);
                                        errorLog.WriteLine(e.StackTrace);
                                        errorLog.WriteLine();
                                    }

                                    if (dump != null)
                                    {
                                        dump.Write(packet.Time);
                                        dump.Write(packet.Length);
                                        dump.Write(packet.Data.Length);
                                        dump.Write(packet.Data, 0, packet.Data.Length);
                                        dump.Flush();
                                    }
                                } catch (Exception ex) {
                                }
                            }
                            else if (ip.Protocol == IPProtocol.Icmp)
                            {
                                // TODO: Deal with ICMP
                            }
                            else if (ip.Protocol == IPProtocol.Gre)
                            {
                                // TODO: Deal with GRE
                            }
                        }
                        else
                        {
                            // TODO: deal with non-IP
                        }

                        #region Age flows
                        /**/
                        while (tracker.Count > 0 && tracker.Tail.Last < packet.Time - ExpiryInterval)
                        {
                            stats = tracker.Tail;
                            Dump(stats);
                            tracker.Remove(stats);
                        }
                        writer.Flush();
                        /**/
                        #endregion
                    }
                    packets++;
                }
            } catch (EndOfStreamException e) {
                // TODO: nothing
            } catch (Exception e) {
                //debug.WriteLine("ERROR: " + e.Message);
                //debug.Flush();
                throw e;
            }
        }
コード例 #30
0
 public void Assign(IPHeader ip, TcpHeader tcp)
 {
     Source      = new IPEndPoint(ip.SourceIp, tcp.SourcePort);
     Destination = new IPEndPoint(ip.DestinationIp, tcp.DestinationPort);
     Protocol    = ip.Protocol;
 }
コード例 #31
0
        /// <summary>
        /// 抓包
        /// </summary>
        /// <param name="s"></param>
        private void CatchPacket(Object s)
        {
            Socket ss = s as Socket;        //参数转换

            byte[] buffer = new byte[2400]; //接收数据的缓冲区
            while (true)
            {
                if (count > 80000)
                {
                    break;
                }
                int j = ss.Receive(buffer); //接收数据
                if (j > 0)                  //若接收到数据包
                {
                    IPHeader     ipheader = new IPHeader(buffer, j);
                    ListViewItem lv       = new ListViewItem();    //定义一个视图项
                    count += j;                                    //count用于统计接收的总字节数

                    lv.Text = ipheader.srcAddr.ToString();         //往视图项添加源IP
                    lv.SubItems.Add(ipheader.destAddr.ToString()); //往视图项添加目的IP
                    if (ipheader.protocol == 6)                    //6代表TCP
                    {
                        byte[] tcp = new byte[ipheader.length - ipheader.IPlength];
                        Array.Copy(buffer, ipheader.IPlength, tcp, 0, j - ipheader.IPlength);
                        TcpHeader tcpHeader = new TcpHeader(tcp, j);    //解析TCP报文
                        lv.SubItems.Add(tcpHeader.sourcePort.ToString());
                        lv.SubItems.Add(tcpHeader.destinationPort.ToString());
                        lv.SubItems.Add("TCP");

                        ListViewItem tcpListView = new ListViewItem();
                        tcpListView.Text = tcpHeader.sourcePort.ToString();
                        tcpListView.SubItems.Add(tcpHeader.destinationPort.ToString());
                        tcpListView.SubItems.Add(tcpHeader.seq.ToString());
                        tcpListView.SubItems.Add(tcpHeader.ack.ToString());
                        tcpListView.SubItems.Add(tcpHeader.dataOffset.ToString());
                        tcpListView.SubItems.Add(tcpHeader.win.ToString());
                        this.listView2.Items.Add(tcpListView);
                        // if (tcpHeader.destinationPort == 80)
                        // {
                        string str = Encoding.UTF8.GetString(buffer, 40, j - 40);
                        this.richTextBox1.AppendText("\r\n" + str);
                        //  }
                    }
                    else if (ipheader.protocol == 17)
                    {//17代表UDP报文
                        byte[] udp = new byte[ipheader.length - ipheader.IPlength];
                        Array.Copy(buffer, ipheader.IPlength, udp, 0, j - ipheader.IPlength);
                        UdpHeader udpHeader = new UdpHeader(udp, j);    //解析UDP报文
                        lv.SubItems.Add(udpHeader.sourcePort.ToString());
                        lv.SubItems.Add(udpHeader.destinationPort.ToString());
                        lv.SubItems.Add("UDP");
                    }
                    else
                    {//其他协议
                        lv.SubItems.Add(" ");
                        lv.SubItems.Add(" ");
                        lv.SubItems.Add("Others");
                    }
                    lv.SubItems.Add((ipheader.length).ToString());
                    lv.SubItems.Add(count.ToString());
                    this.listView1.Items.Add(lv);
                }
            }
        }