strcpy

20169217 2016-2017-2 《网络攻防实践》第十周学习总结

大兔子大兔子 提交于 2020-02-08 04:34:15
实践报告 和结对同学一起完成,分别作为攻击方和防守方,提交自己攻击和防守的截图 1)攻击方用nmap扫描(给出特定目的的扫描命令) 2)防守方用tcpdump嗅探,用Wireshark分析(保留Wireshark的抓包数据),分析出攻击方的扫描目 的和nmap命令 和赵京鸣一组,攻击机ip为222.28.132.218,靶机ip为222.28.132.98 首先查看了靶机的ip,然后进行ping通 靶机使用tcpdump嗅探,设置过滤条件,发现了攻击机的ip。 攻击机使用nmap的不同参数对靶机进行端口扫描 靶机使用Wireshark条件过滤攻击机发送的数据包,并进行分析 缓冲区攻击的原理 一. 缓冲区溢出的原理 通过往程序的缓冲区写超出其长度的内容,造成缓冲区的溢出,从而破坏程序的堆栈,使程序转而执行其它指令,以达到攻击的目的。造成缓冲区溢出的原因是程序中没有仔细检查用户输入的参数。 例如下面程序: void function(char *str) { char buffer[16]; strcpy(buffer,str); } 上面的strcpy()将直接吧str中的内容copy到buffer中。这样只要str的长度大于16,就会造成buffer的溢出,使程序运行出错。存在象strcpy这样的问题的标准函数还有strcat(),sprintf(),vsprintf(),gets

实验五

时光怂恿深爱的人放手 提交于 2020-02-06 05:57:27
实验结论: 1. 实现方式1:形参是数组,实参是数组名,使用数组元素直接访问方式实现 #include <stdio.h> const int N=5; int binarySearch(int x[], int n, int item); int main() { int a[N]={1,3,9,16,21}; int i,index, key; printf("数组a中的数据:\n"); for(i=0;i<N;i++) printf("%d ",a[i]); printf("\n"); printf("输入待查找的数据项: "); scanf("%d", &key); index=binarySearch(a,N,key); if(index>=0) printf("%d在数组中,下标为%d\n", key, index); else printf("%d不在数组中\n", key); return 0; } int binarySearch(int x[], int n, int item) { int low, high, mid; low = 0; high = n-1; while(low <= high) { mid = (low+high)/2; if (item == x[mid]) return mid; else if(item < x[mid]) high

字符串函数(一) strcpy和strncpy

房东的猫 提交于 2020-02-02 21:21:27
Strcpy: Char *strcpy(char *dst, const char *scr); 返回值为 dst的首地址 下面是一段应用代码 1 #include <stdio.h> 2 #include <string.h> 3 # define MAX 40 4 int main() 5 { 6 char *a="beast"; 7 char b[MAX] ="you are the beast one"; 8 char *p; 9 p = strcpy(b+8,a); 10 puts(a); 11 puts(b); 12 puts(p); 13 return 0; 14 } 注意!!! 在函数的处理过程中 字符数组b已经被修改 从第九个字符't' 开始被字符串a="beast“ 替代 并且字符串结尾处的 ‘\0 '也会被写入,并且从此截断 (因为\0标志着结束,不会读入之后的字符)所以b输出结果为you are bea 而前面也提到了 strcpy函数 返回值为指针dst 即b+8的首地址, 所以输出结果为beast, 即从p的第九个字符开始。 所以strcpy不能完成将某一字符串插入到另一字符串的中间位置上,并保留其余字符。 所以C语言中出现了函数 Strncpy Char *strncpy(char *dst, const char *scr, size_t n);

谭浩强C++第二版,第六章课后习题

こ雲淡風輕ζ 提交于 2020-01-30 02:40:51
#include "includes.h" int arrays[20]; void swap(int& a, int& b) { int temp; temp = a; a = b; b = temp; return; } void swap_str(char* &a, char* &b) { char *temp; temp = a; a = b; b = temp; return; } void Question6_1(int &a,int &b,int &c) { cout << "6-1" << endl; if (a > b) swap(a, b); if (b > c) swap(b, c); if (a > c) swap(a, c); cout << a << b << c<<endl; return; } void Question6_2(char *a, char *b, char *c) { if (strcmp(a, b)> 0) swap_str(a, b); if (strcmp(a, c) > 0) swap_str(a, c); if (strcmp(b, c) > 0) swap_str(b, c); cout << a << b << c << endl; return; } void input_10_number() { int i = 0

课程信息管理系统

馋奶兔 提交于 2020-01-27 13:21:22
C语言程序设计–课程信息管理系统 # include <stdio.h> # include <stdlib.h> # include <string.h> # define LEN 50 //定义一个足够大容量的课程号和名称字符数 # define N 255 //最大的课程数目 //01定义课程信息结构体 struct course { char num [ LEN + 1 ] ; //课程号 char name [ LEN + 1 ] ; //课程名称 char department [ LEN + 1 ] ; //课程系别 char nature [ LEN + 1 ] ; //课程性质 float score ; //课程学分 } subject [ N ] ; int k = 1 , n , m ; //k在后面起到调用主菜单函数的作用,n为课程的总数目,m为课程的最大数目 //函数声明 void read ( ) ; //刷新 void menu ( ) ; //主菜单 void input ( ) ; //使用帮助 void show ( ) ; //课程信息显示 void find ( ) ; //课程信息查找 void remove ( ) ; //课程信息删除 void amend ( ) ; //课程信息修改 void sort ( ) ; //课程信息排序

c语言memset()函数

南楼画角 提交于 2020-01-27 12:34:13
1)名称:memset()函数 2)别称:char型初始化函数 3)功能: 将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值,块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作 4)用法: void *memset(void *s, char ch, unsigned n); 5)作用:在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。 6)代码示例: #include    #include    #include    int main(void)    {    char buffer[] = "Hello world/n";    printf("Buffer before memset: %s/n", buffer);    memset(buffer, '*', strlen(buffer) );    printf("Buffer after memset: %s/n", buffer);    return 0;    }    输出结果:    Buffer before memset: Hello world    Buffer after memset: *********** 7)memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为

memset函数用法

折月煮酒 提交于 2020-01-26 01:53:29
1. memset()函数原型是extern void *memset(void *buffer, int c, int count)   buffer:为指针或是数组   c:是赋给buffer的值 count:是buffer的长度 这个函数在socket中多用于清空数组.如:原型是memset(buffer, 0, sizeof(buffer)), Memset 用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’; 例:char a[100];memset(a, '/0', sizeof(a)); memset可以方便的清空一个结构类型的变量或数组。 如: struct sample_struct {   char csName[16];   int iSeq;   int iType; }; 对于变量:struct sample_struct stTest; 一般情况下,清空stTest的方法: stTest.csName[0]='/0'; stTest.iSeq=0; stTest.iType=0; 用memset就非常方便: memset(&stTest,0,sizeof(struct sample_struct)); 如果是数组: struct sample_struct TEST[10]; 则 memset(TEST,0

字符串

末鹿安然 提交于 2020-01-25 21:22:48
字符串 字符串函数 strcmp() int strcmp(const char *str1, const char *str2) 返回值 如果返回值 < 0,则表示 str1 小于 str2 如果返回值 > 0,则表示 str2 小于 str1 如果返回值 = 0,则表示 str1 等于 str2 strcpy() char* strcpy(char* strDestination, const char* strSource); strcpy() 会把 strSource 指向的字符串复制到 strDestination。 strDestination的空间需要足够大来容纳strSource的数据,否则会溢出 返回值 strDestination中的字符串 3. 4. 字符与数字的转化 字符转数字加‘0’ 数字转字符减‘0’ 字符数组与字符串 来源: CSDN 作者: Mia@ 链接: https://blog.csdn.net/weixin_43008312/article/details/104032186

通讯录查询系统的设计与实现

雨燕双飞 提交于 2020-01-23 20:42:04
1.问题描述和要求 问题描述:为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的电话与地址。设计散列表存储,设计并实现通讯录查找系统。 基本要求: (1)每个记录有下列数据项:电话号码、用户名、地址; (2)从键盘输入信息,以电话号码为关键字建立散列表; (3)采用二次探测再散列法解决冲突; (4)查找并显示给定电话号码的记录; (5)通讯录信息文件保存。 2.问题分析 (1)建立结构体,储存数据项 (2)创建散列表 (3)用二次探测解决散列表冲突 (4)实现散列表的查找 3.数据结构及关键技术 1.散列表 (1)散列表的思想:在元素的存储位置和和其关键字之间建立某种直接关系,那么在查找过程中就无需做比较和很少的比较,按照这种由关键字查找的方法就叫散列查找。 (2)散列表的冲突:对于不同的关键词可能会有相同的散列地址,这种现象是冲突。 (3)二次探测再散列法:关键字值的增量序列为1的平方,-1的平方,2的平方,-2的平方,……,k的平方,-k的平方。 2.从文件中读入数据 c++中有文件输入类ofstream,包含在头文件fstream中。 4.完整源代码 # include <iostream> # include <math.h> # include <cstring> # include <fstream> # include <iomanip> using

memset函数使用详解

时间秒杀一切 提交于 2020-01-22 22:30:47
今天做题卡在MEMSET函数的使用上了,本来以为int a[100]; memset(a, MAX,sizeof(a));就是将a数组全部赋值为MAX,现在才知道他的填充是以字节为单位,一般用于对字符型变量的初值进行赋值. 更详细的解说见百度百科 --> http://baike.baidu.com/view/982208.htm 1。void *memset(void *s,int c,size_t n) 总的作用:将已开辟内存空间 s 的首 n 个字节的值设为值 c。 2。例子 #include void main(){ char *s="Golden Global View"; clrscr(); memset(s,'G',6); printf("%s",s); getchar(); return 0; }  3。memset() 函数常用于内存空间初始化。如: char str[100]; memset(str,0,100); 4。memset()的深刻内涵:用来对一段内存空间全部设置为某个字符,一般用在对定义的字符串进行初始化为‘ ’或‘/0’;例:char a[100];memset(a, '/0', sizeof(a)); memcpy用来做内存拷贝,你可以拿它拷贝任何数据类型的对象,可以指定拷贝的数据长度;例:char a[100],b[50]; memcpy(b,