Linux 之 网络

目录 start

  1. Linux网络管理
    1. DNS
      1. 修改DNS
    2. Route
    3. IPv4和IPv6
    4. Bridge
    5. 基础命令工具
      1. ping
      2. traceroute
      3. netstat
      4. curl
      5. iproute2
      6. tcpdump
      7. netcat
      8. scp
      9. rsync
      10. wget
  2. 常用服务
    1. 邮件服务器postfix和devecot
    2. FTP
      1. 使用
      2. 手机和电脑之间传输管理文件
        1. 手机
        2. 电脑
      3. 配置FTP服务器
    3. SSH
    4. Telnet
    5. Proxy
    6. 防火墙
      1. iptables
    7. 远程桌面
      1. VNC
      2. Xrdp
    8. Tips
      1. 查看进程占用的端口

目录 end|2020-03-14 22:04|


Linux网络管理

DNS

Github: dns topic

  • nslookup dnsutils

    • 强大的调试DNS工具
    • nslookup - 8.8.8.8 进入 REPL 方便调试, 8.8.8.8 是Google开放的DNS 备选 8.8.4.4
      • 结果解释:Non-authoritative answer: 表示这是从缓存得到的结果,不一定准确
      • Server:上连DNS服务器的IP, Address:上连DNS的IP#端口 通常是53
      • canonical name 即CNAME 别名
  • dig

    • 比nslookup更强大 Domain Information Groper
    • 例如:dig +tcp @8.8.8.8 www.baidu.com 采用TCP进行DNS通信(默认UDP)
      • +short 精简输出
      • +nocmd+nocomment+nostat 输出最核心内容
  • drill

  • host

    • host domain
  • whois

    • 查询域名详细信息

修改DNS

  • /etc/resolv.conf 中添加Google的DNS (阿里云 DNS 223.5.5.5 223.6.6.6)
    nameserver 8.8.8.8 
    nameserver 8.8.8.4

刷新本地缓存

  1. sudo /etc/init.d/nscd restart 或者 service nscd restart , 其实就是重启 nscd 服务

Route

参考博客: 路由表的建立算法和有关的刷新协议


IPv4和IPv6

  • IPv4 只有32bit IPv6 有128bit

IPv6

  • 零省略 :如果有一位是 000C 可以直接写C
  • 零压缩 :如果FE04:0:0:0:0:0:0:DA 写成 FE::DA

Bridge

网桥, 通常使用 bridge-utils 的 brctl 进行管理

  • Learn

增加

删除

配置开机启动


基础命令工具

参考书籍 《Linux 大棚命令百篇》

ping

inetutils-ping

  • ping URL : Linux是默认无休止的
    • -c 次数
    • -q 安静模式 不输出
    • -s 默认64字节, 可以指定大小
    • -t 设定 TTL值,Linux默认是64或255 经过一个路由器就会减一
    • -i 每次ping的时间间隔 默认1s root用户才可以设置 0.2 以下
    • -f 暴力尽可能大量包的传送 至少每秒100个
    • 注意:得到的结果中的 mdev 表示ICMP包的RTT偏离平均值的程度,mdev 越大表示网速不稳定 Linux有,mac下叫stddev win系列没有

prettyping

traceroute

显示网络数据包传输到指定主机的路径信息,追踪数据传输路由状况

  • traceroute [选项] [远程主机名或IP地址] [数据包大小]
    • -i<网络接口> : 使用指定的网络接口发送数据包
    • -n : 直接使用IP地址而不使用主机名
    • -v : 详细显示命令的执行过程
    • -w<超时秒数> : 设置等待远程主机回应的时间
    • -x : 开启或者关闭对数据包的正确性校验
    • -s<来源IP> : 设置本机主机发送数据包的IP地址
    • -g<网关地址> : 设置来源的路由网关,最多可设置8个
  1. traceroute -I stackoverflow.com icmp 查看路由表

netstat

相关 iproute2

  • netstat -tunlp | grep 端口号 用于查看指定的端口号的进程情况

  • 参数

    • -p 显示建立相关连接的程序名和PID 需要root
    • -a 显示本机所有连接和监听端口
    • -n 以网络IP地址的形式显示当前建立的有效连接和端口
    • -r 显示路由表信息
    • -s 显示协议的统计信息。
    • -v 显示当前的有效连接
    • -t 显示所有的TCP协议连接情况
    • -u 显示所有的UDP协议连接情况
    • -c<秒数> 后面跟的秒数,表示每个几秒就刷新一次显示
    • -i 显示自动配置接口的状态
    • -l 仅显示连接状态为“LISTEN”的服务的网络状态
  • netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c| sort -hr 查看 socket 状态和数量

  • TIME_WAIT 由于等待 2ML 时间才能关闭socket, 频繁请求会导致大量该状态的 socket

    • 会占用一个五元组:(协议,本地IP,本地端口,远程IP,远程端口)
    • 对于 Web 服务器,协议是 TCP,本地 IP 通常也只有一个,本地端口默认的 80 或者 443。只剩下远程 IP 和远程端口可以变了。
    • 如果远程 IP 是相同的话,就只有远程端口可以变了。这个只有几万个,所以当同一客户端向服务器建立了大量连接之后,会耗尽可用的五元组导致问题。

curl

Official site

  1. 不输出,重定向到黑洞设备 curl -s -o /dev/null URL
  2. 使用基础认证 发送JSON数据 curl -i -H "Content-Type:application/json" -u admin:secret -X POST --data '{"title":"1","content":"1"}' http://tomcat.kcp/email/content

如果没有认证则会收到 401 返回码

  • 使用Cookie curl -v --cookie "USER_TOKEN=Yes" http://127.0.0.1:5000/
  • 使用代理 -x, --proxy [protocol://]host[:port]

参考博客: curl返回常见错误码

参考博客: 使用cURL和用户名和密码?


iproute2

代替 netstat 的强大工具

用途net-tooliproute2
地址和链路配置ifconfigip addr, ip link
路由表routeip route
ARP表arpip neigh
VLANvconfigip link
隧道iptunnelip tunnel
组播ipmaddrip maddr
统计netstatss

ss

参考博客: Linux网络状态工具ss命令使用详解

  • 查看网络连接统计 ss -s
  • 查看打开的端口 ss -l
  • 查看打开的端口以及进程pid ss -pl
  • 查看所有socket连接 ss -a
  • 隧道术: 网络协议的数据包被封装在另一种网络协议的数据包之中 这是VPN的技术理论基础

net-tools 和 iproute 对应关系

作用net-tools用法iproute2用法
展示本机所有网络接口ifconfigip link [show]
开启/停止某个网络接口ifconfig ech0 up/downip link set eth0 up/down
给网络接口设置/删除IPipconfig eth0 10.0.0.0.1/24 / ifconfig eth0 0ip addr add/del 10.0.0.1/24 dev eth0
显示某个网络接口的IPifconfig eth0ip addr show dev eth0
显示路由表route -nip route show
添加删除默认网关route add/del default gw 192.168.1.2 eth0ip route add/del via 192.168.1.2 eth0
ip route replace default via 192.168.1.2 dev eth0
添加ARParp -s 192.168.1.100 00:0c:29:c5:5a:edip neigh add 192.168.1.100 lladdr 00:0c:29:c5:5a:ed dev eth0
删除ARParp -d 192.168.1.100ip neigh del 192.168.1.100 dev eth0
展示套接字状态netstat -lss -l
  • 默认网关: 如果主机找不到转发规则, 就把数据包发给默认的网关
  • 增加/删除一条路由规则 ip route add/del 192.168.2.0/24 via 192.168.1.254
    • 当使用 VPN 时,建立新的虚拟网卡 tun, 可以手动设置路由让指定ip走虚拟网卡 从而访问到VPN内局域网地址(网络号和真实网卡一样,默认会把数据包转发至本地局域网)
  • 关闭 启用 ifconfig name down/up
  • 设置网卡 eno1 MAC 地址ip link set eno1 address b4:xx:xx

tcpdump

  • tcpdump -i eth0 -nn -X 'port 53' -c 1 root用户才有运行权限

    • -i 指定监听的网络接口(网卡)
    • -nn 将协议号或端口号,显示数字,而不是名称例如:21 而不显示 FTP
    • -X 将协议头和包内容完整的显示出来
    • port 53 过滤,只显示53端口相关的包
    • -c 抓包的数量
    • -e 输出以太网帧头部信息输出 (能看到mac地址)
    • -l 输出变为行缓冲
    • -t 输出不打印时间戳
    • -v 输出更详细信息
    • -F 指定过滤表达式所在的文件
    • -w 将流量保存到文件中
    • -r 读取raw packets 文件
  • 列出可以选择的抓包对象 tcpdump -D(USB设备也能抓?)


netcat

sudo apt install netcat

  • 监听端口 nc -l 11044

    • 建立连接 nc 127.0.0.1 11044 任一方退出 netcat 就终止了该连接
  • 端口扫描 nc -z -v -n -w 2 127.0.0.1 20-33 扫描22-33端口

    • -z 一旦连接立马断开,不发送接收任何数据
    • -v 输出详细信息
    • -n 直接使用IP地址,不使用域名服务器来查询其域名
    • -w 设置连接超时时间 s
    • -u 使用UDP 默认缺省则是TCP
  • 连接开放的端口 nc -v host port

  • 传输文件

    • 服务端发送文件 nc -v -l -p port < temp_out.md
    • 客户端接收文件 nc -v -n host port > temp_in.md
    • 注意 仅单次连接,传输完毕自动断开, 没有进度提示,大文件也不支持。也可以服务端接收文件客户端发,将 < > 互换即可
  • 传输文件夹

    • 服务端 tar -cvPf - /root/book/ | nc -l 12345
    • 客户端 nc -n host port | tar -xvPf -
    • 这是未压缩的, 压缩再加上参数即可 例如 gzip -czvPf -xzvPf

scp

scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,认证用的是ssh 所以也能使用sshpass

    -1:使用ssh协议版本1; 
    -2:使用ssh协议版本2; 
    -4:使用ipv4; 
    -6:使用ipv6; 
    -B:以批处理模式运行; 
    -C:使用压缩; 
    -F:指定ssh配置文件; 
    -l:指定宽带限制; 
    -o:指定使用的ssh选项; 
    -i: 指定私钥文件
    -P:指定远程主机的端口号; 
    -p:保留文件的最后修改时间,最后访问时间和权限模式; 
    -q:不显示复制进度; 
    -r:以递归方式复制。
  • 远程到本地 scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
  • 本地到远程 scp /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest

注: scp rcp wget rsync 几种传输文件的方式

rsync

同步命令 (个人倾向于本地和远程, 书上称为源端和目的端) 命令参数详解 | 本地和VPS0之间同步数据

  • 同步到 rsync file user@host:path 上, 是将这里的file文件覆盖远程的目录下的file文件,不像git那样

    • 同步当前目录 将file 换成 `ls`
    • -t 不加该参数:不会同步文件的修改时间,采用的quick check策略。使用后:让修改时间也同步,如果修改时间一致,就不同步(它不考虑文件内容,这是个坑)。
    • -I 就能解决上面的问题,每个文件都进行同步,代价是速度慢
    • -v 输出更多信息 v可以多个,v越多输出的日志信息也越多
    • -r 文件夹递归同步,这种是采用上面的I策略
    • -l 同步软链接文件,默认是忽略该类文件的
    • -L 同步软链接文件及其目标文件
    • -z 压缩数据,提高传输速度
    • -p 缺省该参数时,如果远程没有该文件,权限会和本地的文件一致, 如果远程已经有该文件,权限和本地的不同, 那么命令不作更改。使用参数后,就会让权限尽力保持一致
    • -a 这个命令等价于 -rlptgoD 归档选项,采用递归方式,尽可能保持各方面的一致,但是不能同步硬链接,得加上 -H
  • 只要文件不一样,就会触发同步,该命令确保远程的是和本地的一致,本地的直接覆盖远程的

  • 只要rsync命令对本地有读权限,对远程有写权限,就能确保目录是一致的

  • rsync只能以登录远程的账号来创建文件,它不可能将文件的组信息,用户信息也一致,除非是root用户可以做到

【其他特别参数】

  • --delete 如果本地没有该文件 远程就会删掉
    • --delete-exclude删除远程指定的文件
    • --delete-after 默认是先清理远程文件再同步,使用该选项就相反了先同步再删除需要删除文件
  • --exclude 排除掉某些文件不同步 可以使用多次
    • --excule-from 如果要排除的文件很多,可以将文件名放在一个文本文件里,然后使用该选项读取该文件
  • --partial 断点续传 可以简写-P
  • --progress 显示传输进度信息

wget

特性和优势:支持 HTTP HTTPS FTP协议

  1. 能够跟踪 HTML 和 XHTML 即可以下载整站,但是注意wget会不停的去下载HTML中的外链,无休无止
  2. 遵守 robots.txt 标准的工具
  3. 支持慢速网路和不稳定的下载,当下载失败就会不断重试,直到下载成功
  4. 支持断点续传
  • wget 配置文件 /etc/wgetrc ~/.wgetrc 两个文件配置(区别是全局和当前用户)wget的默认行为

  • 例如 -X配置:wget -X js,css URL 排除两个文件夹不下载

    • 如果要默认排除,到.wgetrc文件里配置 exclude_directories=js,css
    • 这时候就出了一个问题,你不知道配置文件的情况时,发现总有目录下载不下来,就可以排除两个文件的作用:
    • wget -X '' -X js,css URL
    • 注意:-X,两个配置文件。这三者的配置,wget是取并集的, 使用了-X '' 后就只看后面的-X 参数
  • 参数:

    • 目录下载 -r 递归选项

    • 后台下载 --background 即使 你Ctrl D/exit也不会中断执行

    • -o 指定日志输出。默认当前目录的 wget-log

    • -O 将下载的所有文件的内容追加到指定的文件

    • -c 断点续传 但是有潜在bug,当源站的文件头部分或者已下载部分修改了,wget是不知道的,只会继续下载之前没下载的内容

    • 避开robots.txt 协议 --execute robots=off

      • 尝试使用tomcat构建一个有robots协议的网站,然后wget还是绕过了协议。。。。。。
      • 对github测试这个参数是正常的
    • 简化wget获取到的文件

      • -nH 去除wget将域名作为文件夹的情况,只得到域名下相对路径的文件
      • –cut-dirs=number 去除前缀路径
      • 只用 -r : URL:a/b/c/
      • -r 再用上 --cut-dirs=1 : URL:/b/c/
      • -r 再用上 -nH :a/b/c/
      • -r 再用上 -nH --cut-dirs=1 : /b/c/
      • -r 再用上 -nH --cut-dirs=2 : /c/
    • 平铺,不使用源站的目录结构: -nd 若有重名文件,自动重命名

    • 强制处处文件夹 -x 例如:github.com/a/b/ --> github/com/a/b/

    • 协议命名的根文件夹 --protocol-directories 例如 ftp://baidu.com/a/b/

    • 自动重试 --tries=number 设置下载失败后重试的次数

    • 拒绝重复下载同名文件,即使这个文件不是最新的 -nc, wget会先比较时间戳,然后下载,且多次下载同名文件会自动添加.1.2这样的后缀

    • 自动分析是否下载同名文件, -N 会考虑时间戳以及文件大小,但是不能和 -nc 同时设置

    • 限速 --limit-rate=N 默认单位是b,可以指定单位 k m ,

      • 这个限速的实现原理是通过在进行一次网络读取后,就线程睡眠一会儿,将速度降下来,如果下载是超小文件就可能无法达到限速的效果
    • 限制频率 -w 即 --wait=seconds 可以指定m h d 等单位,效果是每两个请求间隔指定时间

    • 请求重试 --waitretry 设置请求重试的秒数, 如果设置的是10秒, 第一次失败后就会等1s,然后第二次失败就等2s…直到递增到10s,然后结束

      • 其效果 其实应该是 设置值的累加 (理解为重试次数似乎更好)

wget cookie
参考博客: wget命令详解

  • 镜像整站 wget --mirror -p --convert-links -P . URL

    • –miror: 镜像下载
    • -p: 下载所有为了html页面显示正常的文件
    • –convert-links: 下载后,转换成本地的链接
    • -P .: 保存所有文件和目录 到当前目录
  • 获取API返回数据 wget -q url -O -


常用服务

邮件服务器postfix和devecot

FTP

使用

  • 登录ftp host port

手机和电脑之间传输管理文件

前提是两个设备处于同一个局域网, 也就是说连同一个WIFI, 或者电脑开热点给手机连?

手机

手机安装 FeelFTP , 然后设置编码为utf-8, 开启服务器
或者安装ES文件浏览器, 也带有FTP服务器, 但是不稳定, 切出去就停了, 而且不能选择上SDK卡

电脑

安装FileZila 配置正确的ip 端口 用户名 口令 完成连接

配置FTP服务器

  • sudo apt-get install vsftpd -y
  • sudo systemctl start vsftpd.service
  • 创建用户 sudo useradd -d /home/uftp -s /bin/bash uftp
  • 设置密码 sudo passwd uftp
  • 删除掉 pam.d 中 vsftpd,因为该配置文件会导致使用用户名登录 ftp 失败:sudo rm /etc/pam.d/vsftpd
  • 限制用户 uftp 只能通过 FTP 访问服务器,而不能直接登录服务器 sudo usermod -s /sbin/nologin uftp
  • 修改配置文件 sudo chmod a+w /etc/vsftpd.conf

/etc/vsftpd.conf

    # 限制用户对主目录以外目录访问
    chroot_local_user=YES
    # 指定一个 userlist 存放允许访问 ftp 的用户列表
    userlist_deny=NO
    userlist_enable=YES
    # 记录允许访问 ftp 用户列表
    userlist_file=/etc/vsftpd.user_list
    # 不配置可能导致莫名的530问题
    seccomp_sandbox=NO
    # 允许文件上传
    write_enable=YES
    # 使用utf8编码
    utf8_filesystem=YES
  • 新建文件 sudo touch /etc/vsftpd.user_list
  • 修改权限 sudo chmod a+w /etc/vsftpd.user_list
  • 添加用户名 uftp
  • 设置用户目录只读 sudo chmod a-w /home/common
  • 新建公共目录 设置权限 mkdir /home/common/public && sudo chmod 777 -R /home/common/public
  • 重启服务 sudo systemctl restart vsftpd.service
     ~$ sudo mkdir /home/common
     ~$ sudo touch /home/common/welcome.txt
     ~$ sudo useradd -d /home/common -s /bin/bash common
     ~$ sudo passwd common
     ~$ sudo rm /etc/pam.d/vsftpd
     ~$ sudo usermod -s /sbin/nologin common
     ~$ sudo chmod a+w /etc/vsftpd.conf
     ~$ sudo vim /etc/vsftpd.conf
     ~$ sudo vim /etc/vsftpd.user_list
     ~$ sudo chmod a-w /home/common
     ~$ sudo mkdir /home/common/public && sudo chmod 777 -R /home/common/public
     ~$ sudo systemctl restart vsftpd.service

SSH

详细

Telnet

linux telnet命令参数
每天一个linux命令(58):telnet命令

  • 测试端口连通性 telnet ip port 如果端口开放则提示 Connected, 否则会提示 refused
    • netcat 具有同样效果 nc -v -z -n ip port

Proxy

代理

  • mitmproxy tinyproxy mars

防火墙

iptables

参考博客: linux下IPTABLES配置详解

其主要配置文件为: /etc/sysconfig/iptables

  • 查看配置情况 iptables -L -n

  • 开启端口 iptables -A INPUT -p tcp --dport 8000 -j ACCEPT

    • -A 参数表示添加规则,此外-D表示删除规则
    • -p 表示协议,一般都是tcp
    • –dport 就是指定端口号
    • -j 指定是ACCEPT还是DROP,接收还是抛弃

有时候会发生这样的事情

  1. 服务器的服务是正常启动的, 但是客户端连不上, 然后使用curl 去访问那个端口, 报错说 curl: (7) Failed to connect to xxxx port 8080: 没有到主机的路由
  2. 那么这时候就要检查防火墙了

远程桌面

参考博客: 连接Linux远程桌面的四个方法
参考博客: 你会在linux服务器上安装远程桌面吗?

VNC

Virtual Network Computing

参考博客: Ubuntu远程SSH及x11vnc远程桌面连接

  1. 服务端 安装 yay realvnc-vnc-server

  2. 设置密码 x11vnc -storepasswd

  3. 使用密码启动 x11vnc -forever -shared -rfbauth ~/.vnc/passwd

    • 设置分辨率 -geometry 1280×1024
  4. 客户端 vnc-viewer(任意) 输入 ip 即可连接


Xrdp

参考博客: Xrdp - 通过Windows的RDP连接Linux远程桌面


Tips

查看进程占用的端口

netstat lsof fuser

参考博客: linux下常用命令查看端口占用

  • lsof -i:端口号 用于查看某一端口的占用情况,缺省端口号显示全部
    • 或者 cat /etc/services 查看系统以及使用的端口
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值