如何获取本机IE浏览器发送出去的Form表单信息
设某页面,mail.XXX.com页面当中,有一个Form表单,顾客填好信息以后,点击提交以后,如何获取到这个表单的信息?
------解决方案--------------------
以前找的代码,贴给你看,可以研究一下.我用它做过类似的东西.
/// <summary>
/// MyTryRaw 的摘要说明。
/// </summary>
public class MyTryRaw
{
#region Attributes
private bool error_occurred; //套接字在接收包时是否产生错误
private static int len_receive_buf; //得到的数据流的长度
private byte[] receive_buf_bytes = null; //收到的字节
private Socket socket = null; //声明套接字
private const int SIO_RCVALL = unchecked((int)0x98000001); //监听所有的数据包
public static bool isStop = false;
public Socket m_socket
{
get
{
return socket;
}
}
#endregion
#region Events
public delegate void PacketArrivedEventHandler(Object sender, PacketArrivedEventArgs args);
public event PacketArrivedEventHandler PacketArrival;
#endregion
#region OnEvents
protected virtual void OnPacketArrival(PacketArrivedEventArgs e)
{
if (PacketArrival != null)
{
PacketArrival(this, e);
}
}
#endregion
#region Constructor
public MyTryRaw()
{
//
// TODO: 在此处添加构造函数逻辑
//
len_receive_buf = 4096;
receive_buf_bytes = new byte[len_receive_buf];
//PacketArrival += new PacketArrivedEventHandler(MyTryRaw_PacketArrival);
}
#endregion
#region Functions
public void BindSocket()
{
//IPAddress ipAddress = IPAddress.Parse( "192.168.10.233 ");
//this.socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
//Console.WriteLine( "Start bind! ");
//try
//{
// socket.Blocking = false;
// socket.Bind(new IPEndPoint(ipAddress, 80));
//}
//catch (Exception E)
//{
// throw (E);
//}
socket = new Socket(AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP);
socket.Blocking = false; //置socket非阻塞状态
socket.Bind(new IPEndPoint(IPAddress.Parse( "192.168.0.110 "), 0)); //绑定套接字
if (SetSocketOption() == false) error_occurred = true;
Console.WriteLine( "Bind success! ");
}
public bool SetSocketOption()
{
bool ret_value = true;
try
{
//低级别操作模式,接受所有的数据包,这一步是关键,必须把socket设成raw和IP Level才可用SIO_RCVALL
socket.SetSocketOption(SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, 1);
byte[] IN = new byte[4] { 1, 0, 0, 0 };
byte[] OUT = new byte[4];
int ret_code = socket.IOControl(SIO_RCVALL, IN, OUT);
ret_code = OUT[0] + OUT[1] + OUT[2] + OUT[3];//把4个8位字节合成一个32位整数
if (ret_code != 0) ret_value = false;
}
catch (SocketException)
{
ret_value = false;
}
return ret_value;
}
public void ShutDown()
{
Console.WriteLine( "Start ShutDown ");
if (socket != null)
{
socket.Shutdown(SocketShutdown.Both);
socket.Close();
}
socket = null;
Console.WriteLine( "ShutDown Success ");
}
public void Receive(byte[] receivedBytes, int receivedLength)
{
PacketArrivedEventArgs e = new PacketArrivedEventArgs();
int IPVersion = Convert.ToInt16((receivedBytes[0] & 0xF0) > > 4);
e.IPVersion = IPVersion.ToString();
e.HeaderLength = Convert.ToUInt32((receivedBytes[0] & 0x0F) < < 2);
if (receivedBytes.Length > = 20)
{
switch (Convert.ToInt16(receivedBytes[9]))
{
case 1:
e.Protocol = "ICMP ";
break;
case 2:
e.Protocol = "IGMP ";
break;
case 6:
e.Protocol = "TCP ";
break;
case 17:
e.Protocol = "UDP ";
break;
default:
e.Protocol = "Unknow ";
break;
}
e.OriginationAddress = Convert.ToInt16(receivedBytes[12]).ToString() + ". " + Convert.ToInt16(receivedBytes[13]).ToString() + ". " + Convert.ToInt16(receivedBytes[14]).ToString() + ". " + Convert.ToInt16(receivedBytes[15]).ToString();
转:http://www.myexception.cn/c-sharp/74520.html
==================================================================
一. 摘要
Raw Socket: 原始套接字
可以用它来发送和接收 IP 层以上的原始数据包, 如 ICMP, TCP, UDP...
int sockRaw = socket(AF_INET, SOCK_RAW, IPPROTO_RAW);
这样我们就创建了一个 Raw Socket
Sniffer: 嗅探器
关于嗅探器的原理我想大多数人可能都知道
1. 把网卡置于混杂模式;
2. 捕获数据包;
3. 分析数据包.
但具体的实现知道的人恐怕就不是那么多了. 好, 现在让我们用 Raw Socket 的做一个自已的 Sniffer.
二. 把网卡置于混杂模式
在正常的情况下,一个网络接口应该只响应两种数据帧:
一种是与自己硬件地址相匹配的数据帧
一种是发向所有机器的广播数据帧
如果要网卡接收所有通过它的数据, 而不管是不是发给它的, 那么必须把网卡置于混杂模式. 也就是说让它的思维混乱, 不按正常的方式工作. 用 Raw Socket 实现代码如下:
setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (char*)&flag, sizeof(flag); //设置 IP 头操作选项
bind(sockRaw, (PSOCKADDR)&addrLocal, sizeof(addrLocal); //把 sockRaw 绑定到本地网卡上
ioctlsocket(sockRaw, SIO_RCVALL, &dwValue); //让 sockRaw 接受所有的数据
flag 标志是用来设置 IP 头操作的, 也就是说要亲自处理 IP 头: bool flag = ture;
addrLocal 为本地地址: SOCKADDR_IN addrLocal;
dwValue 为输入输出参数, 为 1 时执行, 0 时取消: DWORD dwValue = 1;
没想到这么简单吧?
三. 捕获数据包
你的 sockRaw 现在已经在工作了, 可以在局域网内其它的电脑上用 Sniffer 检测工具检测一下, 看你的网卡是否处于混杂模式(比如 DigitalBrain 的 ARPKiller).
不能让他白白的浪费资源啊, 抓包!
recv(sockRaw, RecvBuf, BUFFER_SIZE, 0); //接受任意数据包
#define BUFFER_SIZE 65535
char RecvBuf[BUFFER_SIZE];
越来越发现 Sniffer 原来如此的简单了, 这么一个函数就已经完成抓取数据包的任务了.
四. 分析数据包
这回抓来的包和平常用 Socket 接受的包可就不是一回事儿了, 里面包含 IP, TCP 等原始信息. 要分析它首先得知道这些结构.
数据包的总体结构:
----------------------------------------------
| ip header | tcp header(or x header) | data |
----------------------------------------------
IP header structure:
4 8 16 32 bit
|--------|--------|----------------|--------------------------------|
| Ver | IHL |Type of service | Total length |
|--------|--------|----------------|--------------------------------|
| Identification | Flags | Fragment offset |
|--------|--------|----------------|--------------------------------|
| Time to live | Protocol | Header checksum |
|--------|--------|----------------|--------------------------------|
| Source address |
|--------|--------|----------------|--------------------------------|
| Destination address |
|--------|--------|----------------|--------------------------------|
| Option + Padding |
|--------|--------|----------------|--------------------------------|
| Data |
|--------|--------|----------------|--------------------------------|
TCP header structure:
16 32 bit
|--------------------------------|--------------------------------|
| Source port | Destination port |
|--------------------------------|--------------------------------|
| Sequence number |
|--------------------------------|--------------------------------|
| Acknowledgement number |
|--------------------------------|--------------------------------|
| Offset | Resrvd |U|A|P|R|S|F| Window |
|--------------------------------|--------------------------------|
| Checksum | Urgent pointer |
|--------------------------------|--------------------------------|
| Option + Padding |
|--------------------------------|--------------------------------|
| Data |
|--------------------------------|--------------------------------|