
Linux
文章平均质量分 63
github/gongluck
这个作者很懒,什么都没留下…
展开
-
Linux服务器开发&音视频技术整理、学习笔记
Linux服务器开发技术整理、学习笔记https://github.com/gongluck/CVIP原创 2020-12-07 10:37:55 · 531 阅读 · 0 评论 -
基于 Ubuntu 搭建 VNC 远程桌面服务
在 Linux 中显示窗口,首先要创建一个 display 服务。而 Xvfb 就是一个轻量级的,不产生实际屏幕输出的虚拟 display 服务程序。 Xvfb 创建 display 后, x11vnc 连上去并转换成 VNC 协议。优点是整个系统按需开启,非常轻量,不会影响服务器性能。转载 2017-12-20 21:08:39 · 940 阅读 · 0 评论 -
第11章 名字与地址转换
名字和数值地址间的转换:gethostbyname() gethostbyaddr()服务名字和端口号之间的转换: getservbyname() getservbyport()解析器代码读 依赖于 配置文件,文件/etc/resolv.conf一般包含本地名字服务器IP地址。DNS替代方法:静态主机文件,/etc/hosts或者网络信息系统NIS。原创 2017-11-13 10:25:49 · 395 阅读 · 0 评论 -
TCP中的RST标志(Reset)详解
转自:http://blog.youkuaiyun.com/erlib/article/details/50132307在谈RST攻击前,必须先了解TCP:如何通过三次握手建立TCP连接、四次握手怎样把全双工的连接关闭掉、滑动窗口是怎么传输数据的、TCP的flag标志位里RST在哪些情况下出现。下面我会画一些尽量简化的图来表达清楚上述几点,之后再了解下RST攻击是怎么回事。 1、TCP转载 2017-12-20 09:01:37 · 1488 阅读 · 0 评论 -
UNPv13:#第5章#TCP客户/服务器程序示例
客户TCP收到FIN只是表示服务器进程已关闭连接的服务端,从而不再往其中发送任何数据而已。FIN的接收并没有告知客户TCP服务器进程已经终止。当一个进程向某个已收到RST的套接字执行写操作时,内核向该进程发送一个SIGPIPE信号。该信号默认行为是终止进程。不论该进程捕获该信号并从其信号处理函数返回,还是简单的忽略该信号,写操作都将返回EPIPE。原创 2017-12-19 17:16:33 · 479 阅读 · 0 评论 -
UNPv13:#附录A#IPv4、IPv6、ICMPv4和ICMPv6
本附录给出IPv4、IPv6、ICMPv4及ICMPv6的概貌。这些材料所提供的额外背景知识对于理解第2章中有关TCP和UDP的讨论会有所帮助。高级套接字编程部分有若干章也使用了IP和ICMP的某些特性,例如IP选项(第27章)以及ping和traceroute程序(第28章)。原创 2017-12-12 16:41:53 · 3021 阅读 · 0 评论 -
搭建 FTP 文件服务
# 限制用户对主目录以外目录访问chroot_local_user=YES# 指定一个 userlist 存放允许访问 ftp 的用户列表userlist_deny=NOuserlist_enable=YES# 记录允许访问 ftp 用户列表userlist_file=/etc/vsftpd.user_list# 不配置可能导致莫名的530问题seccomp_sandbox=NO# 允许文件上传write_enable=YES# 使用utf8编码utf8_filesyste转载 2017-12-20 21:13:02 · 279 阅读 · 0 评论 -
UNPv13:#第1章#简介
概述 TCP本身并不提供记录结束标志:如果应用程序需要确定记录的边界,它就要自己去实现,已有一些常用的方法可供选择。从TCP套接字读取数据时,我们总是需要把read编写在某个循环中,当read返回0(表明对端关闭连接)或负值(表明发生错误)时终止循环。Unix errno值 errno的值只在函数发生错误时设置。如果函数不返回错误,errno的值就没有定义。errno的所有正数错误值都原创 2017-12-13 20:09:01 · 524 阅读 · 0 评论 -
UNPv13:#第2章#传输层:TCP、UDP和SCTP
UDP不保证UDP数据报会到达其最终目的地,不保证各个数据报的先后顺序跨网络后保持不变,也不保证每个数据报只到达一次。UDP是一个简单、不可靠、无连接的协议,而TCP是一个复杂、可靠、面向连接的协议。TCP提供确认、序列号、RTT估算、超时、流量控制和重传等机制。TCP使用三路握手建立连接,使用四分组交换序列终止连接。当一个TCP连接被建立时,它从CLOSED状态转换到ESTABLISHED状态;当该连接被终止时,原创 2017-12-14 15:33:59 · 632 阅读 · 0 评论 -
vsftpd: refusing to run with writable root inside chroot()
从2.3.5之后,vsftpd增强了安全检查,如果用户被限定在了其主目录下,则该用户的主目录不能再具有写权限了!如果检查发现还有写权限,就会报该错误。 要修复这个错误,可以用命令chmod a-w /home/user去除用户主目录的写权限。或者在vsftpd的配置文件中增加一项: allow_writeable_chroot=YES原创 2017-12-19 14:00:13 · 462 阅读 · 0 评论 -
UNPv13:#第3章#套接字编程简介
字节流套接字上调用read或write输入或输出的字节数可能比请求的数量少,原因在于套接字的缓冲器可能已经达到了极限,需要再次调用read或write输入或输出剩余的字节。对于文本行交互的应用来说,程序应该按照操作缓冲区来编写。原创 2017-12-15 10:39:35 · 420 阅读 · 0 评论 -
UNPv13:#第4章#基于TCP套接字编程
客户端和服务器都从socket开始,它返回一个套接字描述符。客户随后调用connect,服务器则调用bind、listen和accept。套接字通常用close关闭,也可以用shutdown半关闭。原创 2017-12-15 16:05:15 · 458 阅读 · 0 评论 -
打开文件open()函数的使用方法详解
头文件:#include #include #include 定义函数: int open(const char * pathname, int flags); int open(const char * pathname, int flags, mode_t mode);函数说明:参数 pathname 指向欲打开的文件路径字符串. 下转载 2017-12-22 22:38:35 · 14885 阅读 · 0 评论 -
文件操作(偏移量)
通过函数lseek可以改变文件当前的读写位置。函数原型: #include #include off_t lseek(int fd, off_t offset, int whence); 参数属性: offset:表示从文件的whence位置开始偏移的位置大小。 whence:表示文件偏移的位置 有三个选项:转载 2017-12-22 22:26:12 · 12248 阅读 · 0 评论 -
linux平台下的写文件刷新
c语言libc库自带的fflush和linux的sync、fsync、fdatasync,字面上都是刷新缓冲区数据到磁盘(当然,fflush还可以刷新缓冲区数据到标准输入、输出以及错误输出)。下面就分析一下上面提到的四个函数的区别。一、c语言fflush和linux的sync、fsync、fdatasync的区别1.接口基本不同fflush是libc库中提供的函数,平台无关,只转载 2017-12-22 22:24:21 · 1108 阅读 · 0 评论 -
第6章 I/O复用:select和poll函数
I/O复用典型使用在下列网络应用场合:1)当客户处理多个描述符(通常是交互式输入和网络套接字)时,必须使用I/O复用2)一个客户同时处理多个套接字是可能的,不过比较少见。在16.5节结合一个web客户的上下文给出这种场合使用select的例子3)如果一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般就要使用I/O复用4)如果一个服务器既要处理TCP,又要处理UDP,一般就要使用I/O复用。8.15节有这么一个例子5)如果一个服务器要处理多个服务或者镀铬协议(在13.5节讲述的inetd原创 2017-11-09 17:16:26 · 387 阅读 · 0 评论 -
第7章 套接字选项
在Linux网络编程中,有时需要设置地址复用,允许发送广播包,将主机加入某个多播组,设置发送与接收缓冲区的大小,设置发送与接收的超时时间,将套接字绑定到某个接口上,发送TCP探测包查看客户端是否保持连接等,这些都需要对套接字选项进行设置.而对套接字选项进行操作的主要有以下两个函数,setsockopt与getsockopt. 这两个函数不仅能够操作套接字层,而且能够操作IP层与TCP层.原创 2017-11-10 10:54:54 · 490 阅读 · 0 评论 -
第8章 基本UDP套接字编程
在没有启动 UDP 服务器的情况下,客户端键入文本行之后,并不会回显该文本行。此时客户端永远阻塞于它的 recvfrom 调用,等待一个永远不会出现的服务器应答。由于服务器没有启动,因此会响应一个端口不可到达的 ICMP 错误消息(即异步错误),但是该 ICMP 错误消息并不会到达客户端进程,因此客户端进程根本不知道发生什么,一直阻塞于它的 recvfrom 调用。为了能使这个异步错误到达客户端进程,我们可以在 UDP 中调用 connect 函数,使其成为一个已连接的 UDP 套接字,但是该链接不会像 T原创 2017-11-10 17:45:30 · 540 阅读 · 0 评论 -
第3章 System V IPC
System V(“系统五”)系统上发明了三种IPC机制(消息队列、信号量和共享内存),通常称为System V IPC。又因为后来被收录到Unix的XSI标准之中故又称为XSI IPC。所以当你看到System V IPC 和 XSI IPC的时候实际上指的是同一种东西。 C语言是一门面向过程的语言,与OO(面向对象)语言不同,它没有做到数据和操作的封装。因此在编写C语言程序的时候暴露在你面前的是一大堆函数。由于缺少OO的那层抽象,增加了记忆时的复杂度,因此如果你对函数分不清的话,常常会原创 2017-12-05 20:12:11 · 552 阅读 · 0 评论 -
跟我一起写Makefile
makefile 介绍make命令执行时,需要一个 makefile 文件,以告诉make命令如何去编译和链接程序。首先,我们用一个示例来说明makefile的书写规则。以便给大家一个感性认识。这个示例来源于gnu的make使用手册,在这个示例中,我们的工程有8个c文件,和3个头文件,我们要写一个makefile来告诉make命令如何编译和链接这几个文件。我们的规则是:1)如果这个工程转载 2017-09-30 16:08:46 · 783 阅读 · 0 评论 -
超级强大的vim配置(vimplus)
整整弄了一天,垃圾网络!http://blog.youkuaiyun.com/freeking101/article/details/62037015转载 2017-10-12 16:46:19 · 1826 阅读 · 0 评论 -
学习GDB
1 简介 GDB(GNU Debugger)是GCC的调试工具。其功能强大,现描述如下: GDB主要帮忙你完成下面四个方面的功能: 1.启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。 2.可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式) 3.当程序被停住时,可以检查此时你的程序中所发生的事。转载 2017-10-15 11:44:16 · 219 阅读 · 0 评论 -
利用xinetd实现简单web服务器(镜像站)
浏览效果:linux服务器安装xinetd后,在/etc/xinetd.d/目录下创建xhttpd文件,并输入内容:service xhttpd{ socket_type = stream protocol = tcp wait = no user = gongluck server = /home/gongluck/桌面/xhttpd原创 2017-10-22 17:14:42 · 813 阅读 · 0 评论 -
第13章 守护进程和inetd超级服务器
#include void openlog(const char* ident, int options, int facility);void syslog(int priority, const char* message, ...);void closelog(void);syslog资料原创 2017-11-13 14:22:20 · 394 阅读 · 0 评论 -
第14章 高级I/O函数
设置套接字时间限制:1、使用alarm函数和SIGALRM信号2、使用由select提供的时间限制3、使用SO_RCVTIMEO和SO_SNDTIMEO套接字选项#include ssize_t read(int fd, void *buf, size_t count);ssize_t write(int fd, const void *buf, size_t count);原创 2017-11-13 17:39:58 · 480 阅读 · 0 评论 -
第15章 Unix域协议
#include struct sockaddr_un{sa_family_t sun_family; /* AF_LOCAL */char sun_path[104]; /*可能是92~108*/};#include //创建两个连接起来的Unix域套接字int socketpair(int family/*AF_LOCAL*/, int typ原创 2017-11-14 14:26:15 · 298 阅读 · 0 评论 -
Ubuntu输入su提示认证失败的解决方法
启动Apache服务时竟然提示权限不够,用su切换,输入密码提示认证失败,这下搞了吧,后来一经查阅原来Ubuntu安装后,root用户默认是被锁定了的,不允许登录,也不允许 su 到 root ,对于桌面用户来说这个可能是为了增强安全性,但是服务器版上的没这个还真不行,赶紧设置下吧。终端下studiogang@studiogang:~$ sudo passwd Password转载 2017-06-04 13:20:06 · 428 阅读 · 0 评论 -
第2章 Posix IPC
POSIX(Portable Operating System Interface)可移植操作系统接口,这样的简写完全是为了和UNIX读起来更像而已。IEEE开发了POSIX,在源码级别定义了一组UNIX操作系统接口。Glibc(GNU C Library),即C运行库,是Linux系统中最底层的API,它就是完全按照POSIX标准编写的。Posix 每个IPC对象是有名称的,而且名称是一个很重要的概念。mq_open sem_open shm_open三个函数的第一个参数就是这个名称,这个原创 2017-11-29 17:19:04 · 422 阅读 · 0 评论 -
第1章 简介
进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法。进程是计算机系统分配资源的最小单位(严格说来是线程)。每个进程都有自己的一部分独立的系统资源,彼此是隔离的。为了能使不同的进程互相访问资源并进行协调工作,才有了进程间通信。举一个典型的例子,使用进程间通信的两个应用可以被分类为客户端和服务器,客户端进程请求数据,服务端回复客户端的数据请求。有一些应用本身既是服务器又是客户端,这在分布式计算中,时常可以见到。这些进程可以运行在同一原创 2017-11-29 14:35:36 · 334 阅读 · 0 评论 -
第16章 非阻塞式I/O
执行时间: 停等版本(完全阻塞) 》 select加阻塞I/O版本 》 fork多进程版本(Linux下多线程也应该差不多) 》 非阻塞I/O版本非阻塞读写#include "../Gnet.h"void do_client(int connfd){ char to[MAX_LINE], fr[MAX_LINE]; c原创 2017-11-15 11:28:06 · 666 阅读 · 0 评论 -
第17章 ioctl操作
/*/usr/src/linux-headers-4.10.0-35/include/uapi/linux/if.h*//* * INET An implementation of the TCP/IP protocol suite for the LINUX * operating system. INET is implemented using the BSD Socket原创 2017-11-15 15:33:58 · 939 阅读 · 0 评论 -
第20章 广播
1·广播和多播要求用于UDP或原始IP,它们不能用于TCP。2·单播IP数据报仅由通过目的IP地址指定的单个主机接收。3·广播分组去往子网上的所以主机,包括发送主机本身。4·(一般)除非显式告诉内核我们准备发送广播数据报,否则系统不允许我们这么做。 const int on = 1; setsockopt(sockfd, SOL_SOCKET, SO_BROAD原创 2017-11-16 09:46:33 · 404 阅读 · 0 评论 -
第21章 多播
1·多播(组播)地址:224.0.0.0~139.255.255.2552·发送多播数据报无需任何特殊处理,发送应用程序不必为此加入多播组3·多播相对于广播的优势在于不会对多播分组不感兴趣的主机增加额外负担#include "../Gnet.h"int main(int argc, const char* argv[]){ int sendfd, recvfd;原创 2017-11-17 09:30:29 · 434 阅读 · 0 评论 -
第25章 信号驱动式I/O
(1)建立SIGIO信号的信号处理函数(2)设置套接字属主(3)开启套接字的信号驱动式I/O标志#include "../Gnet.h"int fd;void sig_io(int sig){ char buf[MAX_LINE]; int nread; struct sockaddr_in client_addr; socklen_t c原创 2017-11-17 17:29:49 · 760 阅读 · 0 评论 -
第26章 线程
#include //线程int pthread_create(pthread_t *tid, const pthread_attr_t *attr, void *(*func)(void*), void *arg);int pthread_join(pthread_t *tid, void **status);pthread_t pthread_self(void);int pthr原创 2017-11-20 11:05:17 · 394 阅读 · 0 评论 -
第30章 客户/服务器程序设计范式
觉得还是按:1 --> 7 --> 9 的顺序选取服务器模型比较(简单)可取。原创 2017-11-20 15:16:40 · 499 阅读 · 0 评论 -
第16章 Sun RPC
RPC:远程过程调用默认情况下服务器并不多线程化rpcgen -C data.x -DDEBUG -Mgcc server.c data_svc.c data_xdr.c -o servergcc client.c data_clnt.c data_xdr.c -o client原创 2017-11-22 21:33:54 · 846 阅读 · 0 评论 -
Brpc学习:简单回显服务器/客户端
百度内最常使用的工业级RPC框架, 有超过600,000个实例(不包含client)和500多种服务, 在百度内叫做"baidu-rpc". 目前只开源C++版本。你可以使用它: 搭建一个能在同端口支持多协议的服务, 或访问各种服务 restful http/https, h2/h2c (与grpc兼容, 即将开源). 使用brpc的http实现比libcurl方便多了。 redis和memcached, 线程安全,比官方client更方便。 r原创 2017-11-28 13:39:06 · 16984 阅读 · 0 评论 -
vsftp配置
最近需要一个ftp,正好借着正在学习centOS的机会配置一个vsftpd。配置的过程中遇到了不少错误,这里记录下正确的完整的过程,以供大家分享。首先下载vsftpd yum install vsftpd,然后确认一下选项是都正确,按照下图所示,特别是前三行,没有的话手动添加。可以现在如果你尝试ftp的话还是不行,是因为你的pubs上传文件夹的权限不对。新建文件转载 2017-06-05 17:02:34 · 249 阅读 · 0 评论