网络专业学习实践实验

1. 配git服务器

  • 如果linux下安装make等不成功的话,先update

  • windows与linux互相粘贴:

sudo apt-get autoremove open-vm-tools
sudo apt-get install open-vm-tools-desktop
之后重启

  • 内容:

linux下配置git服务器并连接到gitee上,windows作为客户端可以与linux下的服务器上传下载文件。

  1. Linux端安装git

sudo apt install git
在这里插入图片描述
git --version在这里插入图片描述
2. Linux端服务器创建新用户管理仓库

cd /home #进入/home/目录
id git #查看git用户是否存在
useradd git #创建git用户
passwd git #为git用户创建密码
(密码Pa$$w0rd)
在这里插入图片描述
3. 创建git仓库,并且将管理者变成新建的Git用户,设置仓库的位置(实验中设置为/home/git/repository/gittest.git 为 Git 仓库)
mkdir -p ./git/repository/gittest.git #在git用户目录下创建仓库目录repositroy,并且创建gittest.git项目测试目录
ls #查看/home/目录下有哪些用户目录
cd git #进入git用户目录
ls #查看git用户目录下有哪些目录/文件
cd repository/ #进入repository仓库目录
ls #查看仓库目录下的项目目录
git init --bare ./gittest.git #初始化项目测试目录, 然后把 Git 仓库的 owner 修改为 git
ll #查看gittest.git项目文件夹的拥有者
chown -R git:git repository #将拥有者改为git用户
ll #再次查看gittest.git项目文件夹的拥有者
在这里插入图片描述
在这里插入图片描述
4. 要在windows上的git clone项目下来的话,需要保证linux上安装了ssh的服务器, 所以在Linux端安装ssh服务器并保证ssh服务器打开。
apt-get install openssh-server
在这里插入图片描述
sudo service ssh start
在这里插入图片描述
5. windows客户端clone项目
· 客户端winodws下载 Git for Windows,地址:https://git-for-windows.github.io/, 安装完之后,可以使用 Git Bash 作为命令行客户端。可查看 Git 版本

· 打开windows上的git新建一个文件夹来放置git项目,通过服务器的ip可以将git项目复制下来:
cd /d #进入D盘
mkdir gittest #创建gittest文件夹
cd gittest/ #进入gittest文件夹
git clone git@服务器公网IP地址:/home/git/repository/gittest.git #IP地址后面跟冒号,冒号后面是刚才初始化的项目文件夹的绝对路径;查看服务器IP地址:在Ubuntu下ifconfig(查ip显示找不到此命令解决办法https://blog.csdn.net/sqhren626232/article/details/87707190)。
查linux服务器IP为:192.168.13.180
在这里插入图片描述

出现问题,windows不能直接访问linux下的服务器的gittest2.。。。。迷茫
  1. linux连接到gitee
    配置git:
    在这里插入图片描述
    生成RSA密钥对:
    ssh-keygen -C ‘邮箱@qq.com’ -t rsa
    (为了方便全程回车即可,不用输入ras文件名及密码,#Generating public/private rsa key pair…
    #三次回车即可生成 ssh key)
    在这里插入图片描述
    查看公钥内容:
    ssh-add ~/.ssh/id_rsa
    cat ~/.ssh/id_rsa.pub
    在这里插入图片描述
    将公钥内容(全部)复制并粘贴(注意:公钥内容以ssh-rsa开头),粘贴地址 https://gitee.com/profile/sshkeys
    在这里插入图片描述

之后添加公钥完成后进行测试公钥,测试SSH链接
ssh -T git@gitee.com
当终端提示welcome to Gitee.com,yourname!表示链接成功
至此以后只要拷贝ssh链接地址,然后利用git指令即可进行相关操作。
此次我的显示successful。
在这里插入图片描述
7. cd到需要上传项目得文件夹下面:
先建立仓库在gitee网站上
在home文件下创建a.txt文件,修改权限,之后
git init
git remote -v
git remote add origin https://gitee.com/qqcom1/socket.git
git pull origin master
git add 【需要上传的文件夹名称】
git commit -m “yyy”
git push origin master
这里提示输入的用户名是邮箱,而不是自己账号的通用用户名,要注意
git push -f 这个命令可以强制推送
删除文件的命令,在root权限下,cd到想删除文件的文件夹下sudo rm -r abc.txt
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2. 写客户端服务器通信程序

Linux环境编译运行C语言程序
https://blog.csdn.net/weixin_44895651/article/details/89309790
gcc xxx.c -o a // 将xxx.c文件编译成a.exe可执行程序,其中a可任意命名
sudo ./a //sudo是获取管理员权限

gcc编译线程程序需带-lpthread选项(否则出错:undefined reference to `pthread_create’) https://blog.csdn.net/zhangjs0322/article/details/16341775?utm_medium=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-searchFromBaidu-1.control

socket基础
https://chenyu.blog.csdn.net/article/details/56678997?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-1.control

Linux socket编程入门及客户端服务器端通信实现 – 基础篇
https://blog.csdn.net/gujinjinseu/article/details/27707661

加粗样式client.c

#include <arpa/inet.h>
#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
#include<errno.h>  
#include<sys/types.h>  
#include<sys/socket.h>  
#include<netinet/in.h>  
  
#define MAXLINE 4096  
  
  
int main(int argc, char** argv)  
{  
    int    sockfd, n,rec_len;  
    char    recvline[4096], sendline[4096];  
    char    buf[MAXLINE];  
    struct sockaddr_in    servaddr;  
  
  
    if( argc != 2){  
    printf("usage: ./client <ipaddress>\n");  
    exit(0);  
    }  
  
  
    if( (sockfd = socket(AF_INET, SOCK_STREAM, 0)) < 0){  
    printf("create socket error: %s(errno: %d)\n", strerror(errno),errno);  
    exit(0);  
    }  
  
  
    memset(&servaddr, 0, sizeof(servaddr));  
    servaddr.sin_family = AF_INET;  
    servaddr.sin_port = htons(8000);  
    if( inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0){  
    printf("inet_pton error for %s\n",argv[1]);  
    exit(0);  
    }  
  
  
    if( connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) < 0){  
    printf("connect error: %s(errno: %d)\n",strerror(errno),errno);  
    exit(0);  
    }  
  
  
    printf("send msg to server: \n");  
    fgets(sendline, 4096, stdin);  
    if( send(sockfd, sendline, strlen(sendline), 0) < 0)  
    {  
    printf("send msg error: %s(errno: %d)\n", strerror(errno), errno);  
    exit(0);  
    }  
    if((rec_len = recv(sockfd, buf, MAXLINE,0)) == -1) {  
       perror("recv error");  
       exit(1);  
    }  
    buf[rec_len]  = '\0';  
    printf("Received : %s ",buf);  
    close(sockfd);  
    exit(0);  
}

server.c

#include<unistd.h>
#include<stdio.h>  
#include<stdlib.h>  
#include<string.h>  
#include<errno.h>  
#include<sys/types.h>  
#include<sys/socket.h>  
#include<netinet/in.h>  
#define DEFAULT_PORT 8000  
#define MAXLINE 4096  
int main(int argc, char** argv)  
{  
    int    socket_fd, connect_fd;  
    struct sockaddr_in     servaddr;  
    char    buff[4096];  
    int     n;  
    //初始化Socket  
    if( (socket_fd = socket(AF_INET, SOCK_STREAM, 0)) == -1 ){  
    printf("create socket error: %s(errno: %d)\n",strerror(errno),errno);  
    exit(0);  
    }  
    //初始化  
    memset(&servaddr, 0, sizeof(servaddr));  
    servaddr.sin_family = AF_INET;  
    servaddr.sin_addr.s_addr = htonl(INADDR_ANY);//IP地址设置成INADDR_ANY,让系统自动获取本机的IP地址。  
    servaddr.sin_port = htons(DEFAULT_PORT);//设置的端口为DEFAULT_PORT  
  
    //将本地地址绑定到所创建的套接字上  
    if( bind(socket_fd, (struct sockaddr*)&servaddr, sizeof(servaddr)) == -1){  
    printf("bind socket error: %s(errno: %d)\n",strerror(errno),errno);  
    exit(0);  
    }  
    //开始监听是否有客户端连接  
    if( listen(socket_fd, 10) == -1){  
    printf("listen socket error: %s(errno: %d)\n",strerror(errno),errno);  
    exit(0);  
    }  
    printf("======waiting for client's request======\n");  
    while(1){  
//阻塞直到有客户端连接,不然多浪费CPU资源。  
        if( (connect_fd = accept(socket_fd, (struct sockaddr*)NULL, NULL)) == -1){  
        printf("accept socket error: %s(errno: %d)",strerror(errno),errno);  
        continue;  
    }  
//接受客户端传过来的数据  
    n = recv(connect_fd, buff, MAXLINE, 0);  
//向客户端发送回应数据  
    if(!fork()){ /*紫禁城*/  
        if(send(connect_fd, "Hello,you are connected!\n", 26,0) == -1)  
        perror("send error");  
        close(connect_fd);  
        exit(0);  
    }  
    buff[n] = '\0';  
    printf("recv msg from client: %s\n", buff);  
    close(connect_fd);  
    }  
    close(socket_fd);  
}

3. 配路由器

  1. router虚拟机修改为三块网络适配器
    ens33(外网网卡eth0)ens38 ens39
    https://blog.csdn.net/weixin_44377973/article/details/105565047
    ubuntu 20.04网卡信息修改
    https://blog.frytea.com/archives/435/

在我的ubuntu20.04版本的netplan中配置文件名称为01-network-manager-all.yml,故修改该配置文件
sudo vim /etc/netplan/01-network-manager-all.yaml
第二步,使命令生效即可即可
sudo netplan apply
在这里插入图片描述
在这里插入图片描述

  1. 打开router的IP转发功能,默认是关闭的。可用下面命令检查:
    more /proc/sys/net/ipv4/ip_forward
    如果显示为0,则是关闭的,需要打开,
    echo 1>/pro/sys/net/ipv4/ip_forward
    为了防止重启配置失效,需要进行如下配置:
    vim /etc/sysctl.conf
    将其中net.ipv4.ip_forward=1前面的注释去掉。然后运行
    sysctl -p
    立即生效,或者重启。
    在这里插入图片描述
    在这里插入图片描述
  2. PC1
    在这里插入图片描述
  3. pc2
    在这里插入图片描述

pc1 ping pc2
在这里插入图片描述
参考文献https://www.cnblogs.com/awy-blog/p/3348855.html
https://blog.csdn.net/qc20042/article/details/5910245?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-3.control

4. 写路由器

5. 做软路由

6. ospf实现

· 安装Ubuntu 20.04 (自定义安装)
· 与windows环境互相粘贴:可以使用网上的普遍的两行代码也可以用那个网上的安装vmtools压缩包那个
· 看《OSPF协议完全实现》1,2章,学习进行跑OSPF协议
第二章 OSPF安装
Ubuntu安装三种方式:https://www.cnblogs.com/xwdreamer/p/3623454.html

gcc安装就包括很多c和c++编译库了https://www.linuxidc.com/linux/2019-06/159059.htm
安装libstdc++
https://blog.csdn.net/u013830021/article/details/51781240
安装make
https://blog.csdn.net/qq_19734597/article/details/103125602

安装tcl:https://blog.csdn.net/zsx18273117003/article/details/83374041

移动和复制文件夹到另一个文件夹:https://blog.csdn.net/ljl1015ljl/article/details/95380668

vim编辑器要安装才能使用:https://www.cnblogs.com/heyangyi/p/8656559.html

解压https://blog.csdn.net/zad522/article/details/2770446?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control

——编辑运行ospf协议出现的bug——
machdep.h 93行注释掉了

dbage.C
117 error: ‘GetNextAdj’ was not declared in this scope 注释掉了
269 warning: ISO C++ forbids converting a string constant to ‘char*‘ [-Wwrite-strings]问题解决:https://blog.csdn.net/digitalkee/article/details/107441452

/usr/include/linux/ip.h:86:8: error: redefinition of ‘struct iphdr’

/usr/bin/ld: cannot find -l**** 问题的解决办法:https://blog.csdn.net/qq_45467083/article/details/108805143(这个不适完全适合我)
https://blog.csdn.net/qq_39584315/article/details/79724038(比较全面)

遇到can not find tcl
建立软链接,在我的安装得tcl的文件夹下就可,usr/local/lib下sudo ln -s /usr/local/lib/libtcl8.6.10.so /usr/local/lib/libtcl.so

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值