554006164

如何获取本机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 | 
|--------------------------------|--------------------------------| 

 

 

 

 

分类:

技术点:

相关文章: