求09年3月计算机二级C语言笔

11-40 CBDDA CDBCD CDABA BACBC ADBCC CBDAC

c语言使用snmp(c语言使用函数输出水仙花数)c语言使用snmp(c语言使用函数输出水仙花数)


c语言使用snmp(c语言使用函数输出水仙花数)


c语言使用snmp(c语言使用函数输出水仙花数)


编程:6.4

7.x/y=%d

8.不能

9.s=0

10.1AbCeDf2Df

11.777654321

12.max(int a,int b)

13.NULL

14.1001,ChangRong,1098.0

15.p++

c语言中数组名作为函数参数

因为你从主函数传过来之后,是给了a[10]啊,与arrlen无关啊,而且在调用函数时是会给局部变量重新分配内存,但这也只是说原先那个内存消失了,那么内存里面的值也会消失了,就会重新执行rrlen=sizeof(a)/4

函数定义和声明的参数应该是:

int

oid_check(struct

snmp_seq

sp,

struct

rmc1207

ramp,

int

buffer_size);

函数调用:

flag=oid_check(sp,

ramp,

buffer_size);

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

在这里,

ramp

是结构体数组的指针

C语言中结构体数组名作为函数参数的问题

两种方法:

函数声明:int oid(snmp_seq sp, rmc1207 ramp[], int size)

函数声明:int oid(snmp_swq sp, rmc1207 ramp, int size)

两种方法实际上是一样的,数组在函数调用时会退化成指针,因此需要传入数组的大小,即int size。

调用: oid(sp, ramp, BUFFER_SIZE)即可。

函数声明中不能直接写BUFFER_SIZE,只能写size。

函数声明:int oid(snmp_seq sp, rmc1207 ramp[], int size)

函数声明:int oid(snmp_swq sp, rmc1207 ramp, int size)

有关snmp的get,getnext,getbulk作的问题

关于snmp编程的资料其实很多。我建议你下载net-snmp开发包,看看里面的代码!他是用C语言编写的,编译后可以linux系统上测试。现成api是没有,不过你可以在这个开发包找到很多有用的函数。你可以重点看一下asn.c(有关ber编码文件)snmp_api.c(解析封装snmp包的)。你把这些文件好好整理一下,就可以得到自己的api,这就是的列子。

我自己动手写过snmp协议,实现get、getnext、set、snmptrap命令。代码不会很长,只有几千行。

如果有问题发邮件到进行交流

在C语言中,如何将字符串“192.168.1.1”转换成MAC地址或IP地址?

//将CString 型IP地址在IPAddressCtrl中显示

CString strIP="192.168.1.1";

DWORD dwIP;

dwIP = inet_addr(strIP);

unsigned char pIP = (unsigned char)&dwIP;

m_ipAddr.SetAddress(pIP, (pIP+1), (pIP+2), (pIP+3));

//将IPAddressCtrl中的IP地址获得并转换成CString型

unsigned char pIP;

CString strIP;

DWORD dwIP;

m_ipAddr.GetAddress(dwIP);

pIP = (unsigned char)&dwIP;

strIP.Format("%u.%u.%u.%u",(pIP+3), (pIP+2), (pIP+1), pIP);

参考别人的,可以借鉴下。

根据IP地址是得不到MAC地址的,因为这是两个不同的概念。

字符串转IP地址,也不用转的,因为也没有这个说法。 IP地址可以用字符串保存

因为ip地址每个段必然是最多3位数字

所以,定义一个字符串"192.168.1.1",for循环整个字符串。以‘.’为分隔,如果'.'之前为一个字符就补充两个0,为两个字符就补充1个0.

大概思路就是这样

我这几天就是编取MAC地址,成功了。

只在同网段的局域网有效,不同网段是无法取到MAC的。

我用的是C++BUILDER6.0,方法不通用,所以,我提供了也对你无用。

不是通用方法,普通办法不易实现。

C语言常用词汇及函数有那些?

常用词汇:

1、short:修饰int,短整型数据,可省略被修饰的int。

2、long:修饰int,长整型数据,可省略被修饰的int。

3、long long:修饰int,超长整型数据,可省略被修饰的int。

4、signed:修饰整型数据,有符号数据类型。

5、unsigned:修饰整型数据,无符号数据类型。

6、restrict:用于限定和约束指针,并表明指针是访问一个数据对象的且初始的方式。

7、return:用在函数体中,返回特定值(如果是void类型,则不返回函数值)。

8、continue:结束当前循环,开始下一轮循环。

9、break:跳出当前循环或switch结构。

10、goto:无条件跳转语句。

11、if:条件语句,后面不需要放分号。

12、else:条件语句否定分支(与if连用)。

13、switch:开关语句(多重分支语句)。

14、case:开关语句中的分支标记,与switch连用。

15、default:开关语句中的“其他”分支,可选。

常用函数:

1、int isalpha(int ch) 若ch是字母('A'-'Z','a'-'z'),返回非0值,否则返回0。

2、int isalnum(int ch) 若ch是字母('A'-'Z','a'-'z')或数字('0'-'9'),返回非0值,否则返回0。

3、int abs(int i) 返回整型参数i的。

4、double cabs(struct complex znum) 返回复数znum的。

5、double fabs(double x) 返回双精度参数x的。

6、long labs(long n) 返回长整型参数n的。

参考资料来源:

C语言如何连接nDPI库

nDPI分析

一.概述

nDPI是保持高度欢迎的OpenDPI,在GPL证书下发布,它的目标是增加新的协议,扩展原有的库;为了支持多平台的体验,它除了支持UNIX系列外,还支持windows版本;而且,可以改动nDPI来适配流量的应用,当网络流量不需要时,可以减掉nDPI的某些特性。

nDPI可检测应用层的协议,它可检测非标准端口,如非80端口的协议;或者检测标准端口,如80端口上的skype协议。

目前nDPI支持多种协议,如下:FTP POP SMTP IMAP DNS IPP HTTP MDNS NTP NETBIOS NFS SSDP BGP SNMP XDMCP SMB SYSLOG DHCP PostgreSQL MySQL TDS DirectDownloadLink l23V5 AppleJu DirectConnect Socrates WinMX VMware PANDO Filetopia iMESH Kontiki OpenFT Kazaa Gnula eDonkey Bittorrent OFF AVI FLASH OGG MPEG QuickTime RealMedia Windowedia MMS XBOX QQ MOVE RTSP Feidian lcecast PPLive ………………下略。

二.nDPI原理

2.1检测模块的初始化

初始化检测模块完善参考数据结构

typedef struct ndpi_detection_module_struct

{包含主要的结构:

1. TCP协议带payload检测函数

2. TCP协议不带payload检测函数

3. UDP协议带payload检测函数

4. UPD协议不带payload检测函数

5. 其他的协议检测函数

}2.2数据检测流程

2.3 数据检测模块(以skype为例)

以skype为例,简述skype检测过程

2.3.1 skype注册函数 ndpi_search_skype()

标题中的函数在2.1中检测模块初始化的时候被注册到ndpi_detection_module_struct中:

void ndpi_search_skype(struct ndpi_detection_module_struct ndpi_struct, struct ndpi_flow_struct flow)

{}

参数分析:1. struct ndpi_detection_module_struct ndpi_struct

即上文2.1中检测模块初始化时生成的结构体,包含了协议分析函数;

2. struct ndpi_flow_struct flow

该结构体包含了网络包中的数据。

2.3.2 skype协议检测函数

Void ndpi_search_skype(struct ndpi_detection_module_struct ndpi_struct, struct ndpi_flow_struct flow)

{ndpi_check_skype(ndpi_struct, flow);

}void ndpi_check_skype(struct ndpi_detection_module_struct ndpi_struct, struct ndpi_flow_struct flow)

{具体的skype协议解析过程;

}三.nDPI与netfilter的结合

在linux内核的插件netfilter中注册nDPI的协议分析引擎,

3.1注册的函数结构体

static struct xt_match

ndpi_mt_reg __read_mostly = {

.name = "ndpi",

.revision = 0,

.family = AF_INET,

.match = ndpi_mt, //在该函数中协议检测引擎分析路过的数据包

.checkentry = ndpi_mt_check,

.destroy = ndpi_mt_destroy,

.matchsize = sizeof(struct xt_ndpi_mt),

.me = THIS_MODULE,

};

3.2 引擎的初始化

整个引擎可以通过netfilter注册到内核中或者可以编译成单独的模块进行动态加载和卸除,具体如下:

module_init(ndpi_mt_init);

module_exit(ndpi_mt_exit);

static int __init ndpi_mt_init(void)

{1. 引用前文2.1中检测模块的初始化;

2. ret = xt_register_match(&ndpi_mt_reg);即这侧3.1中定义的函数结构体;

}