欢迎来到皮皮网官网

【怎么修改源码文字】【wordpress 找源码】【java源码acm】ntop源码

时间:2024-12-23 10:48:56 来源:桃源社区源码

1.xp无法定位程序输入点inetntop于动态链接库ws232dll
2.最佳的源码75个网络安全工具
3.在CentOS系统上安装网络监控软件ntopng
4.Linux实现ARP缓存老化时间原理问题深入解析
5.怎样分析linux的性能指标
6.c#中windows窗体编程

ntop源码

xp无法定位程序输入点inetntop于动态链接库ws232dll

       遇到“xp无法定位程序输入点inetntop于动态链接库ws2_.dll”这类错误,通常是源码因为程序试图调用一个在Windows XP系统的`ws2_.dll`库中不存在的函数。`inetntop`函数是源码Windows Vista及更高版本操作系统中引入的,用于将网络地址(如IPv4或IPv6)转换成点分十进制或文本字符串形式的源码地址。

       由于Windows XP不包含`inetntop`函数,源码直接在XP上运行需要此函数的源码怎么修改源码文字程序会导致上述错误。解决此问题的源码方法有几种:

       1. **升级操作系统**:如果可能,将操作系统升级到支持`inetntop`的源码更高版本,如Windows Vista、源码7、源码8或。源码

       2. **使用兼容层或第三方库**:查找是源码否有软件兼容层(如某些虚拟环境)或第三方库(如开源的`libwininet`或`libwsock`的修改版)可以在Windows XP上模拟`inetntop`函数的行为。

       3. **修改程序**:如果程序的源码源代码可用,尝试修改程序以使用Windows XP支持的源码函数(如`inet_ntoa`用于IPv4地址),或者通过其他方式避免直接调用`inetntop`。源码

       4. **查找替代软件**:如果以上方法不可行,考虑寻找不需要`inetntop`函数或已经为Windows XP优化的替代软件。

       每种方法都有其适用场景和限制,具体选择需根据实际情况判断。

最佳的个网络安全工具

       在这个纷繁复杂的网络世界中,为了保护你的系统和数据安全,拥有一套强大而可靠的网络安全工具显得尤为重要。以下是一些最佳的个网络安全工具,它们涵盖了风险评估、协议检测、入侵防护,以及网络审计等多个方面,确保你的网络防线坚固如铁。

       **1. Nessus** - 作为开源的风险评估工具,Nessus在Linux/BSD/Unix平台上支持远程安全扫描,能够生成详尽的报告并提供改进建议,是安全检查的得力助手。

       **2. Tenable** - 这家公司专注于网络安全暴露管理,提供全面的解决方案,帮助企业实时监控网络安全状况。

       **3. Ethereal** - 这款网络协议检测工具,开源且跨Unix/Windows平台,wordpress 找源码交互式数据包分析能力强大,对网络通信有深入洞察。

       **4. Snort** - 作为入侵检测系统,Snort以开源著称,能对IP网络进行深入分析和协议/内容检测,防止潜在威胁。

       **5. Netcat** - 作为基础的网络工具,Netcat支持TCP/UDP连接,是网络调试和探测的必备工具。

       **6. TCPDump/WinDump** - 作为网络监测和数据收集工具,它们在命令行中表现出色,跨平台适应力强。

       **7. Hping2** - 这个网络探测工具支持多种协议包发送,还具备traceroute功能,让你轻松测试网络连接。

       **8. DSniff** - 用于网络审计和渗透测试,能够监视和分析网络数据,提供深入的网络安全洞察。

       **9. SSHmitm, webmitm** - 以及商业工具如GFI LANguard、Ettercap和Whisker/Libwhisker,它们在数据交换和MITM攻击防范中扮演重要角色。

       **. SSH, OpenSSH** - 开源和商业的SSH/SSH协议保证了远程登录的安全,而Sam Spade和ISS Internet Scanner则在应用层风险评估中提供支持。

       **. Tripwire** - 这个开源工具提供数据完整性监控,商业版本则在Linux上更胜一筹,是Nessus的替代品。

       **. Linux/BSD/Unix/Windows平台** - 你的选择范围广泛,适应不同操作系统。

       **. Nikto** - 开源的web安全扫描工具,有助于检测潜在的漏洞。

       **. Kismet** - 无线嗅探工具,针对Wi-Fi和蓝牙设备,商业版本功能更全面。

       **. SuperScan** - 作为Windows上的免费端口扫描器,McAfee提供强大的防护。

       **. L0phtCrack** - 这款口令审计工具在破解口令方面独具优势。java源码acm

       **. Retina** - 商业风险评估工具BeyondTrust,提供深度的安全评估。

       **. Netfilter** - Linux内核防火墙iptables,状态检测和NAT功能强大。

       **. traceroute/ping/telnet/whois** - 基础命令,跨平台且实用。

       **. Fport** - Windows上的增强netstat,专为Windows设计。

       **. SAINT** - 商业风险评估工具,曾开源,适用于UNIX类平台。

       **. Network Stumbler** - 无线接入点搜索工具,Windows版本,Kismet在UNIX上更受欢迎。

       **. SARA** - SATAN的衍生工具,开源,支持Linux/BSD/Unix。

       **. N-Stealth** - 商业Web扫描工具,Windows专属,源代码不公开。

       **. AirSnort** - 无线WEP密码破解工具,多平台可用。

       **. NBTScan** - 收集Windows网络信息的工具,开源,跨平台。

       **. GnuPG/PGP** - 加密库,开源/商业,适用于所有主要平台。

       **. OpenSSL** - 用于SSL/TLS加密的开源库,广泛支持。

       **. NTop** - 显示网络流量的开源工具,适合监控网络使用情况。

       **. Nemesis** - 命令行工具,用于测试网络设备,Linux专用。

       **. LSOF** - Unix的pix 源码编译诊断工具,列出系统打开的文件,开源。

       **. Hunt** - Linux上的高级包嗅探工具,用于会话劫持。

       **. Honeyd** - 个人 honeynet 实验平台,提供虚拟主机模拟,开源。

       **. Achilles** - 代理服务器测试工具,开源,Windows可用。

       **. Brutus** - 网络认证破解工具,字典攻击支持,免费下载(Windows)。

       **. Stunnel** - 多用途SSL加密外壳,开源,跨平台。

       **. Paketto Keiretsu** - TCP/IP工具集合,开源,功能丰富。

       **. Fragroute** - 损坏IDS工具,开源,支持多种平台。

       **. SPIKE Proxy** - 用于web安全检测的开源HTTP代理。

       **. THC-Hydra** - 网络认证破解工具,开源,适合多种平台。

       **. Nessus功能的补充** - 包括OpenBSD、TCP Wrappers、pwdump3等工具,涵盖了更多安全细节。

       通过这些工具,你可以全面地保护你的网络环境,确保安全无虞。每个工具都有其独特的优势,可根据你的具体需求来选择和部署。记住,github源码泄露安全永远是网络世界中的首要任务。

在CentOS系统上安装网络监控软件ntopng

       ntopng是什么

       Ntopng是一个基于网页的高速通信分析器和流量收集器。Ntopng基于ntop,它运行于所有Unix平台、MacOS X和Windows。

       特性

       从ntopng网站上,我们可以看到他们说它有众多的特性。这里列出了其中一些:

       按各种协议对网络通信排序

       显示网络通信和IPv4/v6的激活主机

       持续不断以RRD格式存储定位主机的通信数据到磁盘

       通过nDPI,ntop的DPI框架,发现应用协议

       显示各种协议间的IP通信分布

       分析IP通信,并根据源/目的地址进行排序

       显示IP通信子网的矩阵(谁在和谁通信?)

       报告按协议类型排序的IP协议使用率

       生成HTML5/AJAX网络通信数据

       安装的先决条件

       Ntop为CentOS和基于位Ubuntu预编译好了包,你可以在它们的下载页面找到这些包。对于位操作系统,你必须从源代码编译。本文在CentOS 6.4 位版本上测试过。但是,它也可以在其它基于CentOS/RedHat的Linux版本上工作。让我们开始吧。

       开发工具

       你必须确保你安装了编译ntopng所需的所有开发工具,要安装开发工具,你可以使用yum命令:

       代码如下:

       # yum groupinstall ‘Development Tools’

       安装TCL

       代码如下:

       # yum install tcl

       安装libpcap

       代码如下:

       # yum install libpcap libpcap-devel

       安装Redis

       代码如下:

       # wget t) == 1 //n-used可能会因为“本地确认”机制而向前推进

           (state == NUD_FAILED ||time_after(now, n-used + n-parms-gc_staletime))) {

           *np = n-next;

           n-dead = 1;

           write_unlock(n-lock);

           neigh_release(n);

           continue;

           }

           if (atomic_read(n-refcnt) == 1 //n-used可能会因为“本地确认”机制而向前推进

           (state == NUD_FAILED ||time_after(now, n-used + n-parms-gc_staletime))) {

           *np = n-next;

           n-dead = 1;

           write_unlock(n-lock);

           neigh_release(n);

           continue;

           }

       如果在实验中,你的处于stale状态的表项没有被及时删除,那么试着执行一下下面的命令:

       [plain] view plaincopyprint?ip route flush cache

       ip route flush cache然后再看看ip neigh ls all的结果,注意,不要指望马上会被删除,因为此时垃圾回收定时器还没有到期呢...但是我敢保证,不长的时间之后,该缓存表项将被删除。

五.第一个问题的解决

       在启用keepalived进行基于vrrp热备份的群组上,很多同学认为根本不需要在进入master状态时重新绑定自己的MAC地址和虚拟IP地址,然而这是根本错误的,如果说没有出现什么问题,那也是侥幸,因为各个路由器上默认配置的arp超时时间一般很短,然而我们不能依赖这种配置。请看下面的图示:

       如果发生了切换,假设路由器上的arp缓存超时时间为1小时,那么在将近一小时内,单向数据将无法通信(假设群组中的主机不会发送数据通过路由器,排出“本地确认”,毕竟我不知道路由器是不是在运行Linux),路由器上的数据将持续不断的法往原来的master,然而原始的matser已经不再持有虚拟IP地址。

       因此,为了使得数据行为不再依赖路由器的配置,必须在vrrp协议下切换到master时手动绑定虚拟IP地址和自己的MAC地址,在Linux上使用方便的arping则是:

       [plain] view plaincopyprint?arping -i ethX -S 1.1.1.1 -B -c 1

       arping -i ethX -S 1.1.1.1 -B -c 1这样一来,获得1.1.1.1这个IP地址的master主机将IP地址为...的ARP请求广播到全网,假设路由器运行Linux,则路由器接收到该ARP请求后将根据来源IP地址更新其本地的ARP缓存表项(如果有的话),然而问题是,该表项更新的结果状态却是stale,这只是ARP的规定,具体在代码中体现是这样的,在arp_process函数的最后:

       复制代码

           

       代码如下:

       if (arp-ar_op != htons(ARPOP_REPLY) || skb-pkt_type != PACKET_HOST)

           state = NUD_STALE;

           neigh_update(n, sha, state, override ? NEIGH_UPDATE_F_OVERRIDE : 0);

           if (arp-ar_op != htons(ARPOP_REPLY) || skb-pkt_type != PACKET_HOST)

           state = NUD_STALE;

           neigh_update(n, sha, state, override ? NEIGH_UPDATE_F_OVERRIDE : 0);

       由此可见,只有实际的外发包的下一跳是1.1.1.1时,才会通过“本地确认”机制或者实际发送ARP请求的方式将对应的MAC地址映射reachable状态。

       更正:在看了keepalived的源码之后,发现这个担心是多余的,毕竟keepalived已经很成熟了,不应该犯“如此低级的错误”,keepalived在某主机切换到master之后,会主动发送免费arp,在keepalived中有代码如是:

       复制代码

           

       代码如下:

       vrrp_send_update(vrrp_rt * vrrp, ip_address * ipaddress, int idx)

           {

           char *msg;

           char addr_str[];

           if (!IP_IS6(ipaddress)) {

           msg = "gratuitous ARPs";

           inet_ntop(AF_INET, ipaddress-u.sin.sin_addr, addr_str, );

           send_gratuitous_arp(ipaddress);

           } else {

           msg = "Unsolicited Neighbour Adverts";

           inet_ntop(AF_INET6, ipaddress-u.sin6_addr, addr_str, );

           ndisc_send_unsolicited_na(ipaddress);

           }

           if (0 == idx debug ) {

           log_message(LOG_INFO, "VRRP_Instance(%s) Sending %s on %s for %s",

           vrrp-iname, msg, IF_NAME(ipaddress-ifp), addr_str);

           }

           }

           vrrp_send_update(vrrp_rt * vrrp, ip_address * ipaddress, int idx)

           {

           char *msg;

           char addr_str[];

           if (!IP_IS6(ipaddress)) {

           msg = "gratuitous ARPs";

           inet_ntop(AF_INET, ipaddress-u.sin.sin_addr, addr_str, );

           send_gratuitous_arp(ipaddress);

           } else {

           msg = "Unsolicited Neighbour Adverts";

           inet_ntop(AF_INET6, ipaddress-u.sin6_addr, addr_str, );

           ndisc_send_unsolicited_na(ipaddress);

           }

           if (0 == idx debug ) {

           log_message(LOG_INFO, "VRRP_Instance(%s) Sending %s on %s for %s",

           vrrp-iname, msg, IF_NAME(ipaddress-ifp), addr_str);

           }

           }

六.第二个问题的解决

       扯了这么多,在Linux上到底怎么设置ARP缓存的老化时间呢?

       我们看到/proc/sys/net/ipv4/neigh/ethX目录下面有多个文件,到底哪个是ARP缓存的老化时间呢?实际上,直接点说,就是base_reachable_time这个文件。其它的都只是优化行为的措施。比如gc_stale_time这个文件记录的是“ARP缓存表项的缓存”的存活时间,该时间只是一个缓存的缓存的存活时间,在该时间内,如果需要用到该邻居,那么直接使用表项记录的数据作为ARP请求的内容即可,或者得到“本地确认”后直接将其置为reachable状态,而不用再通过路由查找,ARP查找,ARP邻居创建,ARP邻居解析这种慢速的方式。

       默认情况下,reachable状态的超时时间是秒,超过秒,ARP缓存表项将改为stale状态,此时,你可以认为该表项已经老化到期了,只是Linux的实现中并没有将其删除罢了,再过了gc_stale_time时间,表项才被删除。在ARP缓存表项成为非reachable之后,垃圾回收器负责执行“再过了gc_stale_time时间,表项才被删除”这件事,这个定时器的下次到期时间是根据base_reachable_time计算出来的,具体就是在neigh_periodic_timer中:

       复制代码

           

       代码如下:

       if (time_after(now, tbl-last_rand + * HZ)) {

           struct neigh_parms *p;

           tbl-last_rand = now;

           for (p = tbl-parms; p; p = p-next)

           //随计化很重要,防止“共振行为”引发的ARP解析风暴

           p-reachable_time =neigh_rand_reach_time(p-base_reachable_time);

           }

           ...

           expire = tbl-parms.base_reachable_time 1;

           expire /= (tbl-hash_mask + 1);

           if (!expire)

           expire = 1;

           mod_timer(tbl-gc_timer, now + expire);

           if (time_after(now, tbl-last_rand + * HZ)) {

           struct neigh_parms *p;

           tbl-last_rand = now;

           for (p = tbl-parms; p; p = p-next)

           //随计化很重要,防止“共振行为”引发的ARP解析风暴

           p-reachable_time =neigh_rand_reach_time(p-base_reachable_time);

           }

           ...

           expire = tbl-parms.base_reachable_time 1;

           expire /= (tbl-hash_mask + 1);

           if (!expire)

           expire = 1;

           mod_timer(tbl-gc_timer, now + expire);

       可见一斑啊!适当地,我们可以通过看代码注释来理解这一点,好心人都会写上注释的。为了实验的条理清晰,我们设计以下两个场景:

       1.使用iptables禁止一切本地接收,从而屏蔽arp本地确认,使用sysctl将base_reachable_time设置为5秒,将gc_stale_time为5秒。

       2.关闭iptables的禁止策略,使用TCP下载外部网络一个超大文件或者进行持续短连接,使用sysctl将base_reachable_time设置为5秒,将gc_stale_time为5秒。

       在两个场景下都使用ping命令来ping本地局域网的默认网关,然后迅速Ctrl-C掉这个ping,用ip neigh show all可以看到默认网关的arp表项,然而在场景1下,大约5秒之内,arp表项将变为stale之后不再改变,再ping的话,表项先变为delay再变为probe,然后为reachable,5秒之内再次成为stale,而在场景2下,arp表项持续为reachable以及dealy,这说明了Linux中的ARP状态机。那么为何场景1中,当表项成为stale之后很久都不会被删除呢?其实这是因为还有路由缓存项在使用它,此时你删除路由缓存之后,arp表项很快被删除。

七.总结

       1.在Linux上如果你想设置你的ARP缓存老化时间,那么执行sysctl -w net.ipv4.neigh.ethX=Y即可,如果设置别的,只是影响了性能,在Linux中,ARP缓存老化以其变为stale状态为准,而不是以其表项被删除为准,stale状态只是对缓存又进行了缓存;

       2.永远记住,在将一个IP地址更换到另一台本网段设备时,尽可能快地广播免费ARP,在Linux上可以使用arping来玩小技巧。

怎样分析linux的性能指标

       LR

       监控

       UNIX/Linux

       系统方法

       一、准备工作:

       1.

       可以通过两种方法验证服务器上是否配置

       rstatd

       守护程序:

       ①使用

       rup

       命令,它用于报告计算机的各种统计信息,其中就包括

       rstatd

       的配置信息。使用命

       令

       rup

       ...,

       此处

       ...

       是要监视的

       linux/Unix

       服务器的

       IP

       ,如果该命令返回相关的

       统计信息。则表示已经配置并且激活了

       rstatd

       守护进程;若未返回有意义的统计信息,或者出现一

       条错误报告,则表示

       rstatd

       守护进程尚未被配置或有问题。

       ②使用

       find

       命令

       #find / -name rpc.rstatd,

       该命令用于查找系统中是否存在

       rpc.rstatd

       文件,如果没有,说明系统没

       有安装

       rstatd

       守护程序。

       2

       .

       linux

       需要下载

       3

       个包:

       (

       1

       )

       rpc.rstatd-4.0.1.tar.gz

       (

       2

       )

       rsh-0.-.i.rpm

       (

       3

       )

       rsh-server-0.-.i.rpm

       3

       .下载并安装

       rstatd

       如果服务器上没有安装

       rstatd

       程序(一般来说

       LINUX

       都没有安装)

       ,需要下载一个包才有这个服

       务

       ,

       包

       名

       字

       是

       rpc.rstatd-4.0.1.tar.gz.

       这

       是

       一

       个

       源

       码

       ,

       需

       要

       编

       译

       ,

       下

       载

       并

       安

       装

       rstatd

       (

       可

       以

       在

       municate with the portmapper on host '...'.

       RPC: RPC call failed.

       RPC-TCP: recv()/recvfrom() failed.

       RPC-TCP: Timeout reached. (entry point: CFactory::Initialize). [MsgId: MMSG-]

       检查原因,发现是

       Linux

       系统中的防火墙开启了并且阻挡了

       LoadRunner

       监控

       Linux

       系统的资源,

       因此要将防火墙关闭。

       关闭防火墙:

       [root@localhost ~]# /etc/init.d/iptables stop;

       三、监控

       UNIX

       lr

       监控

       UNIX

       UNIX

       先启动一

       rstatd

       服务

       以下是在

       IBM AIX

       系统中启动

       rstatd

       服务的方法:

       1

       .使用

       telnet

       以

       root

       用户的身份登录入

       AIX

       系统

       2

       .在命令行提示符下输入:

       vi /etc/inetd.conf

       3

       .查找

       rstatd

       ,找到

       #rstatd

       sunrpc_udp

       udp

       wait

       root /usr/sbin/rpc.rstatd rstatd 1-3

       4

       、将

       #

       去掉

       5

       、

       :wq

       保存修改结果

       6

       、命令提示符下输入:

       refresh

       –

       s inetd

       重新启动服务。

       这样使用

       loadrunner

       就可以监视

       AIX

       系统的性能情况了。

       注:在

       HP UNIX

       系统上编辑完

       inetd.conf

       后,重启

       inetd

       服务需要输入

       inetd -c

       UNIX

       上也可以用

       rup

       命令查看

       rstatd

       程序是否被配置并激活

       若

       rstatd

       程序已经运行,

       重启时,

       先查看进程

       ps -ef |grep inet

       然后杀掉进程,

       再

       refresh

       –

       s inetd

       进行重启。

c#中windows窗体编程

       在Winform中的打印主要可以通过三种方式来实现:一种是使用Winform提供的类,另一种是使用控件,还有一种就是利用水晶报表的打印。

       打印控件主要优势是方便快捷,一般应用于简单、固定、单调的模板打印,其主要常用控件有:

       (1) PrintDocument:是一个可用于设置属性来描述有关打印的信息,并且可用于调用方法Print()或通过事件PrintPage来打印文档的组件。

       (2) PrintDialog:允许用户选择打印机并指定文档中要打印的部分。

       (3) PrintPreviewDialog:此控件是一个打印预览对话框,用于显示文档的打印效果。该控件包含用于打印、放大、显示一页或多页以及关闭对话框的按钮。

       (4) PageSetupDialog:主要用来设置页面大小,页边距等。

       ------------------------------------------------------

       建个winform工程,拖如上四个控件,再拖三个按钮

        public Form1()

        {

        InitializeComponent();

        this.printDialog1.Document = this.printDocument1;//必要的

        this.printPreviewDialog1.Document = this.printDocument1;

        this.pageSetupDialog1.Document = this.printDocument1;

        }

        private void button3_Click(object sender, EventArgs e)

        { //打印

        if (this.printDialog1.ShowDialog() == DialogResult.OK)

        this.printDocument1.Print();

        }

        private void button1_Click(object sender, EventArgs e)

        { //打印预览

        this.printPreviewDialog1.ShowDialog();

        }

        private void button2_Click(object sender, EventArgs e)

        { //打印设置

        this.pageSetupDialog1.ShowDialog();

        }

        private void printDocument1_PrintPage(object sender, System.Drawing.Printing.PrintPageEventArgs e)

        { //双击printDocument控件,这才是真正开始干活的,在这里面写你想要打印信息

        Font font = new Font("Tahoma", , FontStyle.Underline);//设置画笔

        Brush bru = Brushes.Blue;

        Pen pen = new Pen(bru);

        pen.Width = 5;

        //设置各边距

        int nLeft = this.pageSetupDialog1.PageSettings.Margins.Left;

        int nTop = this.pageSetupDialog1.PageSettings.Margins.Top;

        int nRight = this.pageSetupDialog1.PageSettings.Margins.Right;

        int nBottom = this.pageSetupDialog1.PageSettings.Margins.Bottom;

        int nWidth = this.pageSetupDialog1.PageSettings.PaperSize.Width-nRight-nLeft;

        int nHeight = this.pageSetupDialog1.PageSettings.PaperSize.Height-nTop-nBottom;

        //打印各边距

        e.Graphics.DrawLine(pen, nLeft, nTop, nLeft, nTop + nHeight);

        e.Graphics.DrawLine(pen, nLeft+nWidth, nTop, nLeft+nWidth, nTop + nHeight);

        e.Graphics.DrawLine(pen, nLeft, nTop, nLeft+nWidth, nTop);

        e.Graphics.DrawLine(pen, nLeft, nTop+nHeight, nLeft + nWidth, nTop+nHeight);

        //在离左边距,右边距的位置打印haha xixi

        e.Graphics.DrawString("haha xixi", font, bru, nLeft+, nTop+);//如果要打印datagridView在这里遍历便可

        }

       但是如果想打印一张表的数据,我建义你使用水晶报表,这样就方便得多.

       水晶报表(Crystal Report)是业内最专业、功能最强的报表系统,它除了强大的报表功能外,最大的优势是实现了与绝大多数流行开发工具的集成和接口。在VS.Net平台 做过报表开发的程序员,一定都对水晶报表强大、高效、集成等特性留下了深刻印象。除了开发新程序外,在工作中我们常需要接触到很多较早的软件系统报表功能升级的需求,如果能结合水晶报表这一强大的工具,往往能事半功倍。

       因为有些打印效果需要分类汇总、规范的页面格式、预览等,而水晶报表都能方便高效的实现。如打印药品入库清单,需要用到表格的样式,且对总消费求和;处方笺的打印也需要绘制规范的格式,同时还可以利用自带的公式进行相应的数据加工。

       其实现过程:首先建立一个DataSet.xsd文件,在上面创建需要的Table模板,table中的列都将是水晶报表要用到的;其次通过报表专家进行水晶报表的创建,包括需要显示的字段,需要汇总求和的数据,基本样式等都可逐步实现,完成后也可做相应的样式和数据修改;最后把数据库里的数据查询出来,赋给水晶报表数据源,通过CrystalReportView控件展示给用户。通过自带的打印,导出等工具,可以方便的进行操作。

copyright © 2016 powered by 皮皮网   sitemap