摘要:
下面分析使用UDP封装数据包发送流程,从udp的socket创建开始分析, client中调用tunnel函数,tunnel中调用linkfd完成数据的发送。 发送数据流程都在linkfd.c中,这里的发送指的是从虚拟网卡读出数据,作为新建socket的数据部分发送。 linkfd函数中调用lfd_linker函数,其中有数据包的发送函数, if( len && proto_write(fd1, out, len) < 0 ) 那么建立数据包的和连接的过程在哪里?这就要分析fd1了, 下面分析fd1, int fd1 = lfd_host->rmt_fd; 找lfd 阅读全文
摘要:
一、下面分析client端的认证函数(认证过程就是隧道建立过程) 函数client和server分别在文件client.c和server.c中,先分析client. if( (s = socket(AF_INET,SOCK_STREAM,0))==-1 )。。。 隧道使用sock_STREAM建立的,但是隧道中数据的传输可用TCP也可用UDP。 if( bind(s,(struct sockadd... 阅读全文
摘要:
头文件:#include <sys/types.h>#include <unistd.h>#include <fcntl.h>原型:int fcntl(int fd , int cmd,...);参数:变参函数,根据cmd来判断第三个参数。功能:fcntl()用来操作文件描述符的一些特性。fcntl 不仅可以施加建议性锁,还可以施加强制锁。同时,fcntl还能对文件的某一记录进行上锁,也就是记录锁。cmd: F_DUPFD用来查找大于或等于参数arg的最小且仍未使用的文件描述词,并且复制参数fd的文件描述词。执行成功则返回新复制的文件描述词。新描述符与fd共 阅读全文
摘要:
ssize_t read(int fd,void * buf ,size_t count);将fd中内容读出写到buf。返回值:如果实际读的字节数<count,返回实际读的字节数;如果实际fd中字节数>count,返回count.错误返回-1.一般正常情况下,返回的就是count,但是有可能由于信号中断或读到文件尾等原因,读的字节数可能<count.无论如何,返回值<=count.write同。 阅读全文
摘要:
1、UDP(1)client.c#include <stdio.h> #include <stdlib.h> #include <string.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <fcntl.h> #include <sys/stat.h> #include <sys/types.h> #include <sys/socket.h> #defin 阅读全文
摘要:
1、find / -name "*" | xargs grep "route"在根文件夹下查找含有关键字route的文件,列出文件名和route所在行。2、find / -name "*.txt" | xargs grep "route"在根文件夹下查找后缀名为txt且含有关键字route的文件,列... 阅读全文
摘要:
打开或创建文件:c++1234567891011121314151617181920212223242526272829303132333435363738394041424344/***********打开或创建文件**************头文件:#include<stdio.h>原型: FILE *fopen(const char *path,const char *mode); 功能:打开或创建文件。参数:mode有下列几种字符串,r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若 阅读全文
摘要:
1/*头文件:/* According to POSIX.1-2001 */#include <sys/select.h> /* According to earlier standards */#include <sys/time.h>#include <sys/types.h>#include <unistd.h>原型:int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); int pselect( 阅读全文