- 博客(107)
- 问答 (3)
- 收藏
- 关注
原创 ovs实现L2和L3转发
ovs网桥有两种转发模式,默认是standalone模式,当连接不上控制器时会使用ovs默认的转发逻辑,secure模式不使用默认的转发模式使用现有的流表来处理转发逻辑,下面两个命令可以设置ovs的转发模式在我们的拓扑中使用secure模式,使用我们自定义的流表来实现转发。
2024-02-28 14:21:11 1322
原创 模拟kube-ovn创建自定义vpc网关流程
拓扑信息:一个逻辑路由器lr1两个逻辑交换机ls1和ls2分别在两个逻辑交换机上创建了两个端口,并将端口放入了网络命名空间vm1和vm2中在ls2上创建了ovn0端口作为整个vpc的网关,并将ovn0放入了gw网络命名空间中以ens38物理网卡创建了macvlan模式的网卡ens38.100并将创建的虚拟网卡放入了gw网络命名空间中ovn0作为整个vpc的网关内部网卡,ens38.100作为网关的外部网卡,从而实现了网关功能。
2024-02-21 10:44:15 1047
原创 kube-ovn自定义vpc
创建一个自定义vpc,每创建一个vpc,kube-ovn会创建一个ovn逻辑路由器,在vpc中定义的staticRoutes会被添加到ovn逻辑路由器上,下面vpc定义的静态路由是将所有的报文的nexthop到10.0.1.254,10.0.1.254是vpc内部子网的一个ip,是vpc的网关ipkind: Vpcmetadata:spec:- ns1在自定义vpc下创建了一个子网和一个podmetadata:name: net1spec:- ns1---kind: Pod。
2024-02-20 12:25:27 1134
原创 linux内核协议栈和netfilter框架
上面说明了netfilter的五个hook点在linux内核协议栈的处理位置,通过说明内核协议栈的三条流量处理路径和经过的hook点在源码中的位置来更好的理解。
2024-02-19 12:54:19 977
原创 ovs和ovn安装
host1:192.168.10.102 central节点host2:192.168.10.101 host节点host3:192.168.10.103 host节点。
2024-02-18 10:13:27 1249
原创 kube-ovn默认vpc
在对应节点和子网上创建的端口会添加到对应的端口组,并且添加了ovn的路由策略通过匹配报文的源ip地址所在的端口组来决定将报文发送到哪个节点的ovn0网卡,通过这种方式实现了分布式网关。join子网是默认vpc下用来管理node的子网,kube-ovn会在k8s的每个集群的节点上的br-int上创建一个ovn0网卡,用来实现默认vpc下pod与节点之间的互通,并且实现默认vpc下的网关功能。ovn-default是ovn-cluster下的默认子网,在创建pod时没有指定子网时会使用这个默认子网的ip。
2024-02-18 09:52:42 1076
原创 Java中equals和 ==
“==”比较的是什么 对于基本类型(int,char,byte,float,double,short,long,boolean)直接比较的是值 对于引用数据类型比较的对象的地址,因为使用new出来的对象都是存储在堆中的,变量是用来存储对象的地址。 下面举几个例子来看一下结果基本类型的比较package com.sun.practise;public class Test2 { public static void main(String[] args) ..
2020-09-25 09:55:40 229 1
原创 创建SpringMVC流程
创建一个普通的Maven项目,目录结构如下添加依赖在pom.xml<?xml version="1.0" encoding="UTF-8"?><!--suppress ALL --><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLo...
2020-09-20 13:58:56 301
原创 django编写登录注册
User模型User模型是django自带的一个用来表示用户信息的一个模型,这个模型是很重的,用来存储用户信息,django为这个模型提供了很多的方法用来验证用户信息,我们也可以使用一些方法扩展User模型来符合自己的需求。User模型自带的字段:mysql> describe auth_user;+--------------+--------------+------+-----+---------+----------------+| Field | Type
2020-05-31 12:02:35 755
原创 django模型的元选项
abstract选项可以子啊元选项内设置abstract=True来设置,例子:在models.py内写入from django.db import models# Create your models here.class People(models.Model): name=models.CharField(max_length=10) sex=models.CharField(max_length=5) class Meta: abstrac
2020-05-30 21:05:26 433
原创 django模型
模型实现需要了解一下什么是模型,上一节已经建立过一个在models.py里的模型了,模型在django中是一个类,通过ORM是指对象关系模型,使用模型的好处是不需要自己去写原生的sql语句,django会根据你的数据库生成对应的sql并生成响应的表,因此可移植性高。下面是一个简单的例子。在app/models.py写入内容如下from django.db import modelsclass Person(models.Model): first_name = models.Cha
2020-05-30 11:06:17 237
原创 django大体框架
django环境配置django是一个python的web框架,使用极为广泛,首先我们需要配置环境。安装python3在官网可以直接下载,全部默认安装即可 配置好python环境后进入终端使用命令python -m venv project创建一个虚拟环境 在终端下执行project/script/activate.bat运行虚拟环境,执行后我们可以看到终端的变化 现在安装django框架,直接在虚拟环境下执行pip install django即可django项目创建...
2020-05-29 19:11:08 225
原创 格式化字符串漏洞
漏洞产生的原因在编写程序时由于编写的不规范有可能产生这个漏洞。下面一个例子#include<stdio.h>int a=2;int main(){ char b[100]; scanf("%s",b); printf(b); return 0;}编译时使用 gcc test.c -m32表示编译成32位的程...
2019-10-04 13:20:57 606
原创 jarvisoj level3
level3将文件下载下来使用linux下的checksec进行检查开启了什么安全机制sun@ubuntu:~/Desktop/test$ checksec level3 [*] '/home/sun/Desktop/test/level3' Arch: i386-32-little RELRO: Partial RELRO Stack: No c...
2019-10-03 22:30:06 1059
原创 jarvisoj level1-2
level1先使用checksec查询一下这个保护机制没有开启任何保护[*] '/home/sun/Desktop/1' Arch: i386-32-little RELRO: Partial RELRO Stack: No canary found NX: NX disabled PIE: No PIE (0x...
2019-10-03 21:32:53 647
原创 requests库的基本用法
简介主要介绍requests的post和get请求方式,这两种方式使用的最多。get请求import requestsurl='http://www.baidu.com'p=requests.get(url)print(p.text)这是最基本的请求方式使用requests.get返回一个请求的对象,然后将这个请求对象的返回的文本内容输出(输出的是我们正常访问页面的源码)。当...
2019-09-29 19:54:28 4017 1
原创 64位和32位在汇编语言中的区别
在linux如何生成32位的程序在linux下默认生成的是64位的,并且ubuntu中没有安装32位的库,因此如果想要在ubuntu中运行或者生成32位的程序需要安装32位的库。gcc test.c -m32 生成32位的程序sun@ubuntu:~/Desktop$ gcc test.c -m32sun@ubuntu:~/Desktop$ file a.out a.out: ELF 3...
2019-09-25 12:15:56 4625
原创 二进制工具
linux上的动态调试工具gdb现在的pwn题很多都是linux下的程序,因此学会gdb的调试是做pwn题必不可少的,现在简单介绍一下gdb的使用,gdb下有个很好的插件peda,可以安装一下。例子:#include<stdio.h>#include<stdlib.h>#include<unistd.h>int add(int a,int b){...
2019-09-24 22:07:34 1076
原创 栈溢出
栈溢出栈溢出指用户通过输入来覆盖栈的返回地址,如果精心构造一个新的返回地址便能控制程序的执行流程,达到攻击的目的。一个简单的例子来说明一下原理#include<stdio.h>#include<stdlib.h>#include<unistd.h>int attack(){ system("/bin/bash"); ...
2019-09-24 21:20:13 238
原创 C栈和队列的基本操作
#include<stdio.h>#include<stdlib.h>typedef struct stack{ struct node *base; struct node *top; int stacklen;}stack;typedef struct node{ int data; ...
2019-09-09 21:01:20 243
原创 C链表的基本操作
链表的基本操作1.输入内容2.在指定的位置之前插入节点3.在指定的位置之后插入节点4.删除节点5.翻转节点 (没有实现)#include<stdio.h>#include<stdlib.h>typedef struct link{ struct node *start; struct node *end; ...
2019-09-09 20:23:55 256
原创 select多人聊天
head.h#include<stdio.h>#include<stdlib.h>#include<unistd.h>#include<sys/socket.h>#include<fcntl.h>#include<netinet/in.h>#include<arpa/inet.h>#include&...
2019-09-08 16:31:36 389 1
原创 linux C操作sqlite3
sqlite3_open函数原型int sqlite3_open(char *filename,sqlite3 **db);首先介绍sqlite3类型,这个类型是一个表示打开的数据库句柄,函数的作用是打开一个数据库,并将数据库的句柄赋值给db,当数据库不存在时会自动创建一个新的数据库。通常的使用方式:sqlite3 *db;char *filename="db.db"sqlite3...
2019-09-08 11:46:50 678
原创 linux下编译器的使用
源文件编译的过程使用C语言编写一段程序称之为源程序,这个程序是不能直接执行的,需要编译成可执行代码,过程:源程序->预处理->编译->汇编->汇编->链接->可执行代码。拿到一个源程序首先需要进行预处理,预处理的结果便是将头文件的内容放入这个文件中,比如一个C语言程序通常需要包含stdio.h头文件,这个头文件里包含一些函数和变量的声明,预处理便会将这个文...
2019-09-05 22:22:17 502
原创 unix网络编程笔记七
connect函数返回错误分析使用connnect函数连接服务器是TCP的三次握手的过程,当三次握手没有成功时便会出错返回-1,下面说几种出错的情况。当connnect发出连接即发送第一个SYN时,服务器端没有响应时会连续发送几个SYN,如果一直没有响应便会出错返回ETIMEDOUT。当客户端发送SYN请求,但是服务器回应一个RST时,客户端会返回一个ECONNREUSED错误。现在来...
2019-09-03 21:34:39 154
原创 webbench过程
参数 t c f p ? h v get option head tracet表示时间 来设置请求时间c表示并发数 来模拟多少个客户端请求f表示是否接受服务器端的数据 1表示接收p表示设置代理?和h表示显示提示文档v表示显示版本信息下面用来设置请求方法默认:c=1t=60f=0 表示不接收服务器的返回p=0 表示没有使用代理需要注意的一点是使用代理需要指出...
2019-08-30 19:40:18 394
原创 webbench介绍
/* * (C) Radim Kolar 1997-2004 * This is free software, see GNU Public License version 2 for * details. * * Simple forking WWW Server benchmark: * * Usage: * webbench --help * * Return cod...
2019-08-29 20:44:58 537
原创 getopt函数使用
函数原型#include<getopt.h>getopt(int argc,char *argv,char *str);这个函数的作用和main(argc,argv)相似来接收终端传递来的参数,不过这个函数比main函数有更大的优点,通常传递参数和值的时候使用这个比如 "-a 6 -t 7"这种类型的参数。这个函数的第一个和第二个参数都是从main函数中得到的参数,第三个参数...
2019-08-28 20:41:12 1511 1
原创 unix网络编程笔记六
阻塞式I/O模型阻塞式I/O是我们常使用的I/O模型,很多函数默认都是阻塞的比如accept,read等函数。上面这个图展示了阻塞I/O的工作原理,在满足条件之前函数是不返回的比如recvfrom函数在没有网络数据到达之前不返回,当有数据到来时这个函数将数据从内核空间复制到用户空间。非阻塞式I/O模型指在一个函数的条件没有满足时,本应该不返回的但是非阻塞会使这个函数返回一个错误。上面图是...
2019-08-12 13:01:57 152
原创 unix网络编程笔记五
SIGCHLD信号在前面的例子中服务器都是创建一个子进程来和客户端进行交互,当客户端和服务器断开连接时服务器端和客户端交互的进程便会终止,并且会向父进程发送一个SIGCHLD信号,父进程没有对子进程善后的子进程在进程结束后我们称之为僵死进程,僵死进程会保存一些信息告知父进程,包括进程的id,终止状态和资源利用信息等。僵死进程会在内存中占用我们的空间,因此我们希望消除僵死进程,通常是使用wait...
2019-08-12 13:01:02 105
原创 unix网络编程笔记四
fgets和fputs函数#include<stdio.h>char *fgets(char *buf,int n,FILE *fp); 成功返回buf,失败或读取到文件末尾返回NULL这个函数的作用便是在一个文件中读取一行,有三个参数第一个表示读取到数据存放的缓冲区,第二个参数为最大读取的个数,第三个表示文件标识符。读取一行表示当读取到换行符时会在换行符的后面添加一...
2019-08-11 21:08:49 123
原创 信号二
信号的几种状态抵达:表示一个信号到达,要处理的信号。阻塞:表示当信号到达时使信号阻塞,当解除阻塞时再处理信号,阻塞和忽略信号是不同的,忽略是将信号丢弃。未决:表示当将一个信号设置为阻塞时,当这个信号到达时这个信号便是未决的,表示还没有被处理的信号。sigset_t类型sigset_t是一种表示信号的数据类型,使用一位表示一种信号,我们常常使用下面函数进行操纵这个数据类型的数据。...
2019-08-11 08:17:55 298
原创 前言
上学期开设了网络编程这门课,在上课的时候感觉学的不是很好,而且上课讲的内容太过于浅显,因此买了一本unix网络编程想深入学习一下网络编程。在接下来的一段时间内计划把重点放在这方面。...
2019-08-10 16:13:43 83
原创 汇编学习笔记九
转移指令原理:可以修改cs或ipjmp指令loop指令 和cx有关操作符 offset这个指令使用之前需要在一个指令前面定义一个标号,使用offset获取指令的偏移地址jmp指令跳转指令,jmp的后面可以跟一个标号,表示跳转到的位置assume cs:codecode segment mov ax,1 mov ax,1 jmp s mov ax,1...
2019-08-10 16:13:15 181
原创 unix网络编程笔记三
accept函数#include<sysy/socket.h>int socket(int family,int type,int protocol);使用这个函数创建一个套接字,函数执行成功返回一个套接字描述符,套接字描述符是一个小的整形数据,第一个参数表示地址族,第二个参数为套接字类型,第三个参数使用0来自适应前两个参数。family的取值AF_INET表示IPv4...
2019-08-10 11:29:12 323
原创 进程控制二
函数exec函数介绍int execl(const char pathname,const char arg0 ,…/ (char)0 */)int execv(const char *pathname,char *const argv[])int execle(const char pathname,const char arg0 ,…/ (char)0,char *const en...
2019-08-10 05:14:41 111
原创 文件和目录一
stat函数int stat(const char *restrict *pathname,struct stat * restrict buf)int fstat(int fd,struct stat *buf)int lstat(const char *restrict *pathname,struct stat * restrict buf)这几个函数用来获取文件后者目录的基本信息,...
2019-08-10 05:13:48 191
原创 信号一
信号的产生当用户按终端的某些建时会产生信号,比如当用户按delet或者ctrl+c时产生SIGINT信号,默认动作是中断这个进程。硬件异常产生信号:除数为0或者无效的内存引用等。进程调用kill函数将任意信号发送给另一个进程或进程组,但是发送信号的进程必须和接受信号的用户相同或者发送信号的所有者必须是超级用户。信号的处理动作:忽略信号,大多数信号都是这种处理动作,但是SIGKILL和SI...
2019-08-10 05:12:57 162
原创 进程控制一
进程标识每个进程都有一个非负的整数表示一个进程的id,这个id是唯一的,来标识一个进程,但是id是可重用的,当一个进程结束后,另外一个进程便可以使用这个id。通常情况下,id为0的进程是调度进程也被称为系统进程,id为1的是init进程,这个进程读取系统初始化文件。除了进程id,每个进程还有其他的id。#include<unistd.h>pid_t getpid(void) ...
2019-08-10 05:12:00 110
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人