- 博客(40)
- 收藏
- 关注
原创 tcpdump学习笔记(二)
序言单独总结tcpdump抓包的常用命令主要语法过滤主机/IP: tcpdump -i eth1 host 172.16.7.206抓取所有经过网卡1,目的IP为172.16.7.206的网络数据 过滤端口: tcpdump -i eth1 dst port 1234抓取所有经过网卡1,目的端口为1234的网络数据 过滤特定协议: tcpdump -i eth1 udp抓取所有经过网卡1,协议类型...
2018-05-31 16:49:04 463
原创 tcpdump学习笔记(一)
基本概念tcpdump是Linux中强大的网络数据采集分析工具之一。用简单的话来定义tcpdump,就是dump the traffic on a network,根据使用者的定义对网络上的数据包进行截获的包分析工具。tcpdump可以将网络中传送的数据包的“头”完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助去掉...
2018-05-31 16:40:20 225
转载 NAT技术与代理服务器技术的区别
NAT技术 NAT技术是一种网络地址转换技术,网络地址转换(NAT,Network Address Translation)属接入广域网(WAN)技术,是一种将私有(保留)地址转化为合法IP地址的转换技术,它被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美地解决了lP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的...
2018-05-31 11:47:12 896
转载 常见网络攻击手段原理分析
TCP SYN拒绝服务攻击 一般情况下,一个TCP连接的建立需要经过三次握手的过程,即: 1、建立发起者向目标计算机发送一个TCP SYN报文; 2、目标计算机收到这个SYN报文后,在内存中创建TCP连接控制块(TCB),然后向发起者回送一个TCP ACK报文,等待发起者的回应; 3、发起者收到TCP ACK报文后,再回应一个ACK报文,这样TCP连接就建立起来了。 利用这个过程,一些恶...
2018-05-31 11:35:53 963
原创 利用指针对数组进行初始化
对一个数组进行初始化,使数组中的所有元素全部为0,这个操作是很简单的。最简便的方法就是在对数组进行定义时就对其初始化:#include <stdio.h>#define LEN 5int main(){ int arr[LEN] = {0}; int i = 0; for(;i < LEN;i++) printf("%d ",arr[i...
2018-05-28 15:50:17 7968
转载 海量数据处理:十道面试题与十个海量数据处理方法总结
说明:本文分为俩部分,第一部分为10道海量数据处理的面试题,第二部分为10个海量数据处理的方法总结。出处:http://blog.csdn.net/v_JULY_v。---------------------------------------------------------------------------------------------------------------------...
2018-05-28 03:55:12 328
原创 海量处理问题的解决方案
1. 给定一个大小超过 100G 的文件, 其中存在 IP 地址, 找到其中出现次数最多的 IP 地址(hash文件切分) 2. 给定100亿个整数, 找到其中只出现一次的整数(位图变形, 用两位来表示次数). 3. 有两个文件, 分别有100亿个query(查询词, 字符串), 只有1G内存, 找到两个文件的交集(hash文件切分 + 布隆过滤器). 4. 给上千个文件, 每个文件大小为1K -...
2018-05-28 03:46:03 367
原创 排序算法的实现
冒泡排序重复的走访过要排序的数列。一次比较两个元素,如果他们的顺序错误,就把他们交换过来。走访数列的工作是重复的进行,直到没有再需要交换的元素,即该序列已经排序完成。 void Swap(int* a,int* b){ int tmp = *a; *a = *b; *b = tmp;}void BubbleSort...
2018-05-27 11:23:47 230
原创 计数一个值中值为1的位的个数
初级版本:通过右移操作,每右移一位就通过取模来判断最后一位是否为1。int count_one_bits(unsigned value){ int ones = 0; for(;value != 0;value = value >> 1){ if(value % 2 != 0) ones += 1; } retur...
2018-05-26 23:14:45 837
原创 网络基础——DNS
DNSDNS(Domain Name System),意为域名解析协议。是一整套从域名映射到IP的系统。DNS是应用层协议,底层运用的是UDP协议。DNS是Internet上解决网上机器命名的一种系统。就像拜访朋友要先知道别人家怎么走一样,Internet上当一台主机要访问另一台主机时,必须首先获知其地址。TCP/IP中的IP地址是由四段以“.”分开的数字组成,使用IP地址和端口号来确定网络上...
2018-05-24 23:16:42 240
原创 网络基础——ARP协议
ARP协议是“Address Resolution Protocol”(地址解析协议)的缩写。在局域网中,网络上实际上传输的是“帧”,帧里面是有目标主机的Mac地址的。在以太网中,一个主机要和另一个主机进行直接通信,必须要知道目标主机的Mac地址。但这个目标Mac地址是如何获得的呢?它就是通过地址解析协议获得的。所谓的“地址解析”,就是主机在发送帧前将目标IP地址转换成目标Mac地址的过程。A...
2018-05-24 21:53:27 785
原创 网络基础——数据链路层
数据链路层介于物理层和网络层之间,在物理层提供的服务的基础上向网络层提供服务。数据链路层最基本的服务是将源机网络层来的数据可靠地传输到相邻节点的目的机网络层。数据链路层解决的是在局域网内点到点的问题。认识以太网以太网是当今应用最广泛的局域网技术,它不是一种具体的网络,而是一种技术标准。既包含了数据链路层的内容,也包含了一些物理层的内容。以太网中的网线必须使用双绞线。和以太网并列的还有令牌环网、无线...
2018-05-24 19:55:01 242
原创 网络基础——网络层
网络层提供路由和寻址的功能,使两个终端系统能够互联且决定最佳路径,并具有一定的拥塞控制和流量控制能力。TCP/IP协议体系中的网络层功能由IP协议规定和实现,故又称IP层。网络层介于运输层和数据链路层之间,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从而向运输层提供最基本的端到端的数据传送服务。IP协议基本概...
2018-05-22 23:36:44 736
原创 网络基础——TCP与UDP的对比
TCP与UDP的基本区别(1)基于连接与无连接;(2)TCP要求系统资源较多,UDP较少;(3)UDP程序结构较简单;(4)面向字节流(TCP)与面向数据报(UDP);(5)TCP能保证传输的可靠性,UDP不能;(6)TCP能保证数据的按序到达,UDP不能。TCPTCP编程的服务器端一般步骤是:(1)创建一个socket,用函数socket();(2)设置socket属性,用函数setsockop...
2018-05-22 20:02:17 277
原创 哈希表拓展——布隆过滤器
布隆过滤器的基本概念布隆过滤器是由bitmap和几个hash函数实现的,主要用于检查一个元素是否存在与一个集合中。布隆过滤器的优缺点优点:查找时间和快空间效率都优于其他的算法;缺点:有误错率。可能你要查找的元素并不存在,但是以前插入的数据刚好将你的key经过几个映射函数的bit位置为1,这就造成一种假象,你要查找的数据存在。直觉上判断这种情况发生的概率还是比较低的,能想到的就是当你的数据量很大的时...
2018-05-22 15:17:23 292
原创 哈希表拓展——位图
位图的基本概念位图 就是bitmap的缩写,是用每一位来存放数的状态的结构,适用于大规模的数据。位图的用处位图主要用于海量数据处理,索引,数据压缩等方面。位图的结构位图的结构类似于哈希表,位图就是用每一位的0或1来表示一个数的状态。例如,我们现在有一个文件,这个文件中有数字1,3,5.我们就可以把第1位、第3位、第5位的状态设置为1,其余位为0。 位图...
2018-05-22 14:49:20 650
原创 网络基础——TCP的各种机制
确认应答机制(ACK) TCP将每个字节的数据都进行了编号,即为序列号。每一个ACK都带有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据,下一次你从哪里开始发。超时重传机制 主机A发送数据给B以后,可能因为网络拥堵等原因,数据无法到达主机B;如果主机A在一个特定时间间隔内没有收到B发来的确认应答,...
2018-05-22 00:49:20 5368
原创 哈希表(2)
在上一篇博客中,我们实现了一种哈希表,现在我们基于哈希桶来实现哈希表的基本操作。hash.h:#pragma once#include<stdio.h>#include<stdlib.h>#include<stddef.h>#define HashMaxSize 1000typedef int KeyType;typedef int...
2018-05-21 22:11:45 168
原创 哈希表(1)
哈希表也称散列表,是根据关键码值而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。哈希表的查找速度非常快,几乎是O(1)的时间复杂度。下面我们实现的哈希表期望存储的数据是键值对的结构。头文件:hash.h:#pragma once#include<stdio.h>#include<stddef.h>#define ...
2018-05-19 20:59:42 228
原创 网络基础——连接管理机制
在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接。在之前的博客中,我们已经介绍过了TCP三次握手以及四次挥手的过程,现在我们就这个问题,从传输层的角度来探讨一下。 三次握手(1)客户端向服务器发送SYN信号,请求建立连接;(2)服务器端接收到客户端的请求后,发送SYN+ACK信号,表示确认建立连接;(3)客户端收到服务器端的反馈后,向服务器端发送ACK字段表示确认...
2018-05-17 22:54:52 1007
原创 网络基础——TCP协议
TCP协议的全称为“传输控制协议”,是一种面向连接的、可靠的、基于字节流的运输层通信协议,主要是对数据的传输进行一个详细的控制。TCP协议段格式...
2018-05-17 19:24:52 265
原创 pidof简介
pidof是Linux系统中用来查找正在运行进程的进程号(PID)的工具。我们可以通过查询man手册来了解:语法:pidof [进程名]常用选项: -s 表示只返回1个 pid -x 表示同时返回运行给定程序的 shell 的 pid -o 表示告诉 piod 表示忽略后面给定的 pid ,可以使用多个 -o 。...
2018-05-17 00:23:33 835 2
原创 网络基础——传输层
传输层负责数据能够从发送端传输接收端。端口号端口号(port)标识了一个主机上进行通信的不同的应用程序。 在TCP/IP协议中,用“源IP”,“源端口号”(统称为源端套接字),“目的IP”,“目的端口号”(统称为服务器端套接字),“协议号”这样一个五元组来标识一个通信,可通过netstat -n查看。协议号决定了使用传输层的哪个协议。服务器的端口号是确定的。...
2018-05-17 00:07:52 265
原创 二叉搜索树的基本操作
二叉搜索树又称二叉排序树,具有以下性质: 1.若它的左子树不为空,则左子树上所有节点的值均小于根节点的值; 2.若它的右子树不为空,则右子树上所有节点的值均大于根节点的值。如下图所示结构即为一个二叉搜索树: 二叉搜索树的基本操作:#pragma once#include<stdio.h>#include<stdlib.h>#...
2018-05-15 20:20:05 191
原创 MySQL常用语法小结
创建数据库:create database basename;显示数据库:show databases;使用该数据库:use basename删除数据库:drop database basename;创建表: create table tablename( sno int primary key, name varch...
2018-05-15 19:15:20 164
原创 堆的基本操作
堆(heap)也被称为优先队列(priority queue)。队列中允许的操作是先进先出(FIFO),在队尾插入元素,在队头取出元素。而堆也是一样,在堆底插入元素,在堆顶取出元素,但是堆中元素的排列不是按照到来的先后顺序,而是按照一定的优先顺序排列的。这个优先顺序可以是元素的大小或者其他规则。堆可以分为最大堆和最小堆。 最大堆满足:(1)根节点为最大值;(2)父节点大于子节点。 ...
2018-05-14 17:24:12 224
原创 netstat详解
netstat是控制台命令,是一个监控TCP/IP网络的非常有用的工具。它可以显示路由表、实际的网络连接以及每一个网络接口设备的状态信息。netstat可以用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接状况。netstat相关命令:1.netstat -a:显示所有网络连接和侦听端口。2.netstat -l:显示监控中的服务器的socket。3....
2018-05-13 19:09:38 1860 1
原创 网络编程套接字(8)——TCP协议通讯过程
下图为基于TCP协议的客户端/服务器程序的一般流程:服务器初始化: 调用socket,创建文件描述符; 调用bind,将当前的文件描述符与ip/port绑定在一起。若此端口已被其他进程占用,则绑定失败; 调用listen,声明当前的文件描述符作为一个服务器的文件描述符,为后面的accept做准备; 调用accept,阻塞式等待客户端连接过来。...
2018-05-06 20:34:42 295 1
原创 网络编程套接字(7)——多线程版本的简单TCP网络程序
通过每个请求创建一个线程的方式来支持多连接:server.c:#include <stdio.h>#include<pthread.h>#include<sys/socket.h>#include<netinet/in.h>#include<unistd.h>#include<string.h>#include&l...
2018-05-06 20:32:24 261
原创 网络编程套接字(6)——多进程版本的简单TCP网络程序
在上一篇博客中,我们实现了单进程版本的简单TCP网络程序。这种程序一次只能连接一个客户端,具有局限性。所以现在我们来实现多进程版本的简单TCP网络程序,通过创建子进程的方式来支持多连接。server.c:#include <stdio.h>#include<sys/socket.h>#include<netinet/in.h>#include<uni...
2018-05-06 20:06:48 191
原创 网络编程套接字(5)——单进程版本的简单TCP网络程序
下面我们来实现一个简单的阻塞式的网络聊天工具:TCP服务器server.c的作用为接受client的请求,并与client进行简单的数据通信。#include <stdio.h>#include<sys/socket.h>#include<netinet/in.h>#include<unistd.h>#include<string.h&...
2018-05-06 19:52:18 296
原创 网络编程套接字(4)——地址转换函数
我们只介绍基于IPv4的socket网络编程,sockaddr_in中的成员struct in_addr sin_addr表示32位的IP地址。在日常生活中,我们常用点分十进制的字符串来表示IP地址。以下函数可在字符串表示和in_addr表示之间转换。字符串转in_addr的函数in_addr转字符串的函数其中inet_pton和inet_ntop不仅可以转换IPv4的in_addr,还可以转...
2018-05-06 13:04:33 844
原创 网络编程套接字(3)——简单的UDP网络程序
UDP服务器#include <stdio.h>#include<sys/types.h>#include<sys/socket.h>#include<string.h>#include<netinet/in.h>#include<stdlib.h>void service(int sock){ char...
2018-05-06 11:55:32 262
原创 二叉树相关面试题
树的先序遍历(非递归版本)void TreePreOrderByLoop(TreeNode* root){ if(root == NULL) return; //1.先将根节点入栈 SeqStack stack; SeqStackInit(&stack); SeqStackPush(&stack,root); //2....
2018-05-04 23:52:37 177
原创 二叉树的基本操作
创建树节点TreeNode* CreateTreeNode(TreeNodeType value){ TreeNode* new_node = (TreeNode*)malloc(sizeof(TreeNode)); new_node->data = value; new_node->lchild = NULL; new_node->rchild ...
2018-05-04 23:41:30 236
原创 网络编程套接字(2)——socket编程接口
socket常见APIsockaddr结构socket API是一层抽象的网络编程接口,适用于各种底层网络协议,如IPv4、IPv6、UNIX Domain Socket(域间套接字)。 IPv4和IPv6的地址格式定义在netinet/in.h中。IPv4地址用sockaddr_in结构体表示,包括16位地址类型(标识是哪种类型),16位端口号和32位IP地址。只要取得某种s...
2018-05-03 09:23:08 213
原创 网络编程套接字(1)——预备知识
认识IP地址IP协议有两个版本:IPv4和IPv6。在我们之后的博客中,凡是提到IP协议,没有特殊说明,默认都指的是IPv4。IP地址是在IP协议中,用来标识网络中不同主机的地址。对于IPv4来说,IP地址是一个4字节,32位的整数。通常使用“点分十进制”的字符串表示IP地址,例如192.168.3.57。用点分割的每一个数字表示一个数字,范围是0~255。源IP地址和目的IP地址在IP数据包头部...
2018-05-02 23:54:36 224
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人