public struct IpHeader
{
[FieldOffset(0)] public byte ip_verlen; // 4位首部长度,4位IP版本号
[FieldOffset(1)] public byte ip_tos; // 8位服务类型TOS
[FieldOffset(2)] public ushort ip_totallength; // 16位包总长度(字节)
[FieldOffset(4)] public ushort ip_id; // 16位标识
[FieldOffset(6)] public ushort ip_offset; // 3位标志位
[FieldOffset(8)] public byte ip_ttl; // 8位生存时间 TTL
[FieldOffset(9)] public byte ip_protocol; // 8位协议 (TCP, UDP 或其他):ICMP=1,TCP=6,UDP=17
[FieldOffset(10)] public ushort ip_checksum; // 16位IP首部校验和
[FieldOffset(12)] public long ip_srcaddr; // 32位源IP地址
[FieldOffset(16)] public long ip_destaddr; // 32位目的IP地址
}使用了RawSocket,在接收到数据包后,将其转换为IpHeader结构,然后取出源地址转化为IPAddress
IpHeader *header = (IpHeader *)received_data;
header_len = (header->ip_verlen & 0x0F) << 2;
protocol = header->ip_protocol;
ip_srcaddr = header->ip_srcaddr;
ip_destaddr = header->ip_destaddr;// 这里会出错:指定的参数已超出有效值的范围。参数名: newAddress
tmp_ip = new IPAddress(ip_srcaddr);
from_ip = tmp_ip.ToString();
tmp_ip = new IPAddress(ip_destaddr);
to_ip = tmp_ip.ToString();
tmp_ip = null;/////////////////////////////////////////////////////////////////////
程序中查看ip_srcaddr、ip_destaddr值如下:
ip_srcaddr : -281431975460854
ip_destaddr: -8574703053125517302
{
[FieldOffset(0)] public byte ip_verlen; // 4位首部长度,4位IP版本号
[FieldOffset(1)] public byte ip_tos; // 8位服务类型TOS
[FieldOffset(2)] public ushort ip_totallength; // 16位包总长度(字节)
[FieldOffset(4)] public ushort ip_id; // 16位标识
[FieldOffset(6)] public ushort ip_offset; // 3位标志位
[FieldOffset(8)] public byte ip_ttl; // 8位生存时间 TTL
[FieldOffset(9)] public byte ip_protocol; // 8位协议 (TCP, UDP 或其他):ICMP=1,TCP=6,UDP=17
[FieldOffset(10)] public ushort ip_checksum; // 16位IP首部校验和
[FieldOffset(12)] public long ip_srcaddr; // 32位源IP地址
[FieldOffset(16)] public long ip_destaddr; // 32位目的IP地址
}使用了RawSocket,在接收到数据包后,将其转换为IpHeader结构,然后取出源地址转化为IPAddress
IpHeader *header = (IpHeader *)received_data;
header_len = (header->ip_verlen & 0x0F) << 2;
protocol = header->ip_protocol;
ip_srcaddr = header->ip_srcaddr;
ip_destaddr = header->ip_destaddr;// 这里会出错:指定的参数已超出有效值的范围。参数名: newAddress
tmp_ip = new IPAddress(ip_srcaddr);
from_ip = tmp_ip.ToString();
tmp_ip = new IPAddress(ip_destaddr);
to_ip = tmp_ip.ToString();
tmp_ip = null;/////////////////////////////////////////////////////////////////////
程序中查看ip_srcaddr、ip_destaddr值如下:
ip_srcaddr : -281431975460854
ip_destaddr: -8574703053125517302
http://www.codeproject.com/cs/internet/hssniffer.asp