-
由于项目的需要,要从终端与服务器的通讯数据中获取终端硬件状态,所以用到了
广为流传的
C#
抓包库
Sha
rpPcap
。
SharpPcap
目前最新版本是
3.1.0
,基于
p>
.Net 3.5
和
WinPcap
。这儿请注意,如果
你用的版本和我的版本差别太大,就不需要浪费时
间看这篇文章了。比方说你用的
是基于
.Net 2.0
的旧版,库完全不一样,请搜索
SharpPcap
< br>,旧版
SharpPcap
的文
章还是挺多的,或者你用的是最新的版本,那请直接参考
SharpPcap
下载网站的最
新版
source
< br>包里的
examples
中的内容。
在使用前首先需要安装
WinPcap
< br>,下载地址:
/install/
SharpPcap
下载地址:
/projects/
p>
sharppcap
/
,下载
SharpPcap
dll
库包
< br>SharpPcap
-
,同样也可以在
< br>files
里找到对应
的
sou
rce
包
SharpPcap
-
和
SharpPcap
历史版本。
SharpPcap
库下载之解压后,直接在项
目中
引用
SharpPcap
.dll
和
即可使用了。
下面贴我整理出来的
SharpPcap
< br>的示例大全的代码,其实也就是把
source
包
examples
中的官方示例里我所用得上的内容整合在了一起(不
包括
ARP
、
DumpFile
和
MultipleFilters
):
p>
代码
1
using
System;
2
using
c;
3
using
;
//
需要添加
引用
(
右键项的
引用
添加
,
在
.net
项可以找到
)
4
using
5
using
SharpPcap
;
//
需要添
加
引用
SharpPcap
.dll<
/p>
和
6
7
namespace
TestConsole
8
{
9
class
Program
10
{
11
static
void
Main(
string
[] args)
12
{
13
//
显示
SharpPcap
版本
14
string
ver =
SharpPcap
.nString;
15
ine(
SharpPcap
{0}
, ver);
16
17
//
获取网络设备
18
LivePcapDeviceList
devices
=
ce;
19
if
( <
1
)
20
{
21
ine(
p>
找不到网络设备
)
;
22
return
;
23
}
24
ine();
25
ine(
以下是目前本计算机上的活动网络设备
:
);
26
ine(
);
27
ine();
28
int
i =
0
;
29
foreach
(LivePcapDevice dev
in
devices)
30
{
31
ine(
, i, ,
ption);
32
i++;
33
}
34
35
//
选择要监听的网络设备
36
ine();
37
(
请选择一个需要监听的网络设备
:
);
38
i =
int
.Parse(ne());
39
LivePcapDevice device = devices[i];
40
41
(
请选择操作:
监听通讯
[C/c]
,
多线程监听通
讯
[T/t]
,监听统计
[F/f]<
/p>
,发送随机数据包
[S/s]?
);
42
string
resp =
ne().ToUpper();
43
44
while
(!(With(
) ||
With(
) ||
With(
) ||
With(
)))
45
{
46
resp =
ne().ToUpper();
47
}
48
49
try
50
{
51
if
(With(
) ||
With(
) ||
With(
))
52
{
53
//
监听过滤条件
54
string
filter =
;
55
56
//
连接设备
57
backgroundThread =
null
;
58
int
readTimeoutMilliseconds
=
1000
;
59
if
(With(
))
60
{
61
(cuous,
readTimeoutMilliseconds);
62
ter(filter);
63
= tics;
//
抓包
统计
64
Statistics +=
new
StatisticsModeEventHandler(device_OnPcapStatistic
s);
//
抓包统计回调事件
65
}
66
else
if
(With(
))
67
{
68
(cuous,
readTimeoutMilliseconds);
69
ter(filter);
70
=
s;
//
抓数据包
71
showDetails
=
th(
);
//
当抓数据
包时,检查是否要查看详情
72
etArrival +=
new
PacketArrivalEventHandler(device_OnPacketArrival);
//
抓数据包回调事件
73
}
74
else
75
{
76
backgroundThread =
new
(BackgroundThread);
77
();
78
();
79
ter(filter);
80
=
s;
//
抓数据包
81
showDetails
=
th(
);
//
当抓数据
包时,检查是否要查看详情
82
etArrival +=
new
PacketArrivalEventHandler(device_OnThreadPacketArr
ival);
//
抓数据包回调
事件
83
}
84
85
ine();
86
ine(
当前
TCPdump
< br>过滤条件
:
{
0
}
, filter);
87
ine(
正在监听设备
{0},
按
'
回车
'
键以停止监听
...
,
ption);
88
89
//
开始监听
90
apture();
91
92
//
停止监听
93
ne();
94
pture();
95
ine(
停止监听
.
< br>);
96
97
if
(backgroundThread !=
null
)
98
{
99
BackgroundThreadStop =
true
;
100
();
101
}
102
}
103
else
if
(With(
))
104
{
105
//
连接设备
106
();
107
108
//
生成随机数据包
109
byte
[] bytes =
GetRandomPacket();
110
111
try
112
{
113
//
发送数据
114
115
cket(bytes);
116
SendQueue squeue =
new
SendQueue(
2000
);
117
ine(
单个数据包发送成功
.
);
118
119
for
(
int
j =
0
; j <
10
; j++)
120
{
121
if
(!(bytes))
122
{
123
ine(
警告
:
队列大小
不足以存放所有数据包,将只发送部分数据包
.<
/p>
);
124
break
;
-
-
-
-
-
-
-
-
-
上一篇:描写雨很大的词语四字成语
下一篇:描写烟花的词语