目录

network 和 NetworkManager关系:

实验:编写一个扫描脚本,知道本局域网里哪些ip在使用,哪些没有使用? 使用的ip对应的mac地址都要显示出来

计算机程序执行的两种不同方式:

shell语言编写扫描脚本

思路一:通过ping命令获取在线的IP地址,然后通过截取arp缓存表里的数据获得IP地址对应的mac地址

思路二:通过ping命令获取在线的IP地址,然后对在线的IP地址通过arping命令获取对应的mac地址

python语言编写扫描脚本

路由器(router)

路由器的功能:

路由器的工作原理

步骤:

路由器转发数据包的封装过程

路由表:

查看路由表的方式(Linux):

路由表的方式(Windows)

路由的类型:

常用的路由类型:

1、直连路由   (directly connected)

2、静态路由  (static)

3、动态路由  (Dynamic)

4、默认路由  (default)

路由的优先级:直连路由  >  静态路由  > 动态路由  >  默认路由

给路由器添加静态路由的命令

ping某网址的过程

PC0(192.168.1.1/24) --》  ping 192.168.1.254

PC0(192.168.1.1/24) --》 ping  192.168.2.1

故障排除:

1、分层检查

2、分段检查

课后实验:


network 和 NetworkManager关系:

network 是一个给linux机器配置网络参数(ip,子网掩码,dns,网关等)。

NetworkManager 是linux系统里管理所有的网络连接的服务,可以禁用网卡,启用网卡。

network依赖于NetworkManage,NetworkManage将网卡禁用,network服务就没有办法给网卡配置ip地址了

nmcli(network manager  client)是  network manager服务的客户端命令,可以给服务传递参数,进行设置

nmcli n 可以查看网络是否 被禁用

nmcli  n  on  启用网络 
nmcli  n  off 禁用网络

示例:

实验:编写一个扫描脚本,知道本局域网里哪些ip在使用,哪些没有使用? 使用的ip对应的mac地址都要显示出来

IP地址范围(仅供参考):192.168.2.0/24     192.168.2.1 ~ 254
                                    ping   192.168.2.1

使用shell、python或者go去编写局域网扫描工具,获取正在使用的ip和对应的mac地址
告诉哪些ip地址在使用,哪些没有使用?

去了解下,python/go里有哪些类似于ping命令的库(扫描的库)
    ping库
    socket库
    pythonping
    python_arptable
    ipaddress

计算机程序执行的两种不同方式:

串行:  按照顺序进行 --》效率低,耗时比较长
并行:  同时执行   --》效率高,耗时短

shell语言编写扫描脚本

思路一:通过ping命令获取在线的IP地址,然后通过截取arp缓存表里的数据获得IP地址对应的mac地址

[root@sc-server shell]# cat scan_lan.sh
#!/bin/bash
# lan  network 192.168.1.0  #清空文件
>ip_used.txt
>ip_unused.txt# ping local host
for  i in {1..254}
do(if   ping -c 1 -w 1 192.168.1.$i  &>/dev/null ;thenecho  "192.168.1.$i is used" |tee -a ip_used.txtelseecho  "192.168.1.$i is not used"|tee -a ip_unused.txt  fi)&
done
wait#统计有多少ip在使用,多少没有使用
num1=$(wc -l < ip_used.txt)
num2=$(wc -l <ip_unused.txt)echo "total ip used number: $num1"
echo "total ip unused number: $num2"
#输出ip和mac的对应关系---》arp缓存表里的内容
arp -n|grep -v  "incomplete"|tail -n +2|awk '{print $1,$3}' >ip_mac.txt
echo "ip和mac地址"
cat  ip_mac.txt
[root@sc-server shell]# 

(命令)&  启动一个子进程去执行命令,在后台执行,不影响前台程序执行,达到我们想要的并发效果

wait 父进程等待子程序执行完毕,然后退出

思路二:通过ping命令获取在线的IP地址,然后对在线的IP地址通过arping命令获取对应的mac地址

#/bin/bash#创建文件保存IP地址和MAC地址
>used_ip_mac.txt
>unused_ip.txt
>used_ip.txt
#得到自己的IP地址和mac地址
output1=$(ip add|grep "ens33:" -A2|head -n 3  | tail -n 1 |awk -F " " '{print $2}'|awk -F "/" '{print $1}')
output2=$(ip add|grep "ens33:" -A2|head -n 2  | tail -n 1 |awk -F " " '{print $2}')
#遍历整个网段,一个一个IP地址的arping
for i in {1..254}
do(if ping  192.168.2.$i -c 1 -w 1 &>/dev/null ;thenecho "192.168.2.$i" >> used_ip.txtif  [ "192.168.2.$i" != "$output1" ];thenarping -I ens33 192.168.2.$i -w 1 -c 1|awk -F " " '{print $4,$5}'|head -n 2|tail -n 1  >> used_ip_mac.txtelseecho "1"fielseecho "192.168.2.$i" >> unused_ip.txt fi)&
done
wait#统计没有使用的ip地址的个数
num=$(cat  unused_ip.txt |wc -l)
echo "Unused ip: $num"  >>unused_ip.txt#统计可以使用的ip地址的个数
num=$(cat  used_ip.txt |wc -l)
echo "Used ip: $num"  >>used_ip.txt#添加自己的IP地址和MAC地址
echo "${output1} ${output2}" >> used_ip_mac.txt

python语言编写扫描脚本

思路:通过socket库获取自己的IP地址,然后通过pythonping库获取在线的IP地址,然后通过正则表达式访问arp缓存表并筛选出IP对应的mac地址,最后将程序通过多线程完成

import os
import re
import threading
from pythonping import ping
import socket
import uuid
import ipaddressip_list = []
ip_mac_list = []
target = []
sort_ip_list = []#查找出自己的IP地址和MAC地址(cmd里面使用 ipconfig /all)
def local_ip_mac1():# 获取本机IP地址ip_address = socket.gethostbyname(socket.gethostname())# 获取本机MAC地址# 将读取的倒叙的全大写的MAC地址保存在列表list中list = [('{:02x}'.format((uuid.getnode() >> i) & 0xFF)).upper() for i in range(0, 48, 8)]mac_address = '-'.join(list[::-1])return ip_address,mac_address
# 我们使用 socket.gethostname() 获取主机名,然后使用 socket.gethostbyname() 函数根据主机名获取对应的 IP 地址。
# 我们使用 uuid.getnode() 函数获取一个唯一的标识符,然后将其转换为十六进制表示,并以冒号分隔每两个字符。
# print(local_ip_mac1())# 判断该网段IP地址能否ping通   ip是否在线
def ip_online(target):ping_result = ping(target,timeout=0.3)if ping_result.success():print(f"Ping {target} 成功!")# print(f"平均响应时间: {ping_result.rtt_avg_ms} ms")ip_list.append(target)else:print(f"Ping {target} 失败!")# 通过IP查MAC
def ip2mac(ip):  # 通过IP查MACloc_ip, mac = local_ip_mac1()if ip == loc_ip:return maccmd = f'arp -a {ip}'output = os.popen(cmd)outstr = ' '.join(list(output))if '未找到 ARP 项' not in outstr:  # 排除本机macs = re.findall('(([A-Fa-f0-9]{2}-){5}[A-Fa-f0-9]{2})', outstr, re.S)for i in macs[0]:if len(i) == 17:return i
#多线程扫描
def scan(ip_online, ip):# 执行扫描操作# 创建线程列表threads = []# 遍历 IP 列表,为每个 IP 创建一个线程并启动它for ip in target:t = threading.Thread(target=ip_online, args=(ip,))t.start()threads.append(t)# 等待所有线程完成for t in threads:t.join()#IP地址排序
def sorted1(ip_list):#定义列表ip_list2 = []ip_list3 = []# 将str类型的ip地址转换成IPv4Address类型的IP地址,方便排序for i in ip_list:ip_network = ipaddress.ip_address(i)ip_list2.append(ip_network)ip_list2 = sorted(ip_list2)# print(ip_list2)# 将排序好的IPv4Address地址转换成str类型的并输出for i in ip_list2:# print(i,type(i))ip_str1 = i.__str__()# print(ip_str1,type(ip_str1))ip_list3.append(ip_str1)return ip_list3if __name__ == '__main__':# 判定IP地址范围for i in range(1, 255):target.append(f"192.168.2.{i}")# 执行多线程scan(ip_online,target)# 输出在线的IP地址列表# print(ip_list)# 排序IP地址sort_ip_list = sorted1(ip_list)print(sort_ip_list)#将得到的IP地址和mac地址放入ip_mac_list列表中for ip in sort_ip_list:ip_mac_list.append(ip + " " + ip2mac(ip))# 输出ip_mac_list表print(ip_mac_list)

路由器(router)

路由器的功能:

能实现跨网段通信,将数据从一个网络转发到另一个网络。

跨越从源主机到目标主机的一个互联网络来转发数据包的过程

在转发数据包的过程中,根据某个理由选择最佳路径帮助我们转发数据

路由工作在网络层,它通过路由选择路由转发完成自己的功能

交换机工作在数据链路层

根据“MAC地址表”转发数据

硬件转发

路由器的工作原理

    1.查看ip包的目的ip地址
    2.计算出目标网段
    3.到路由表里查看是否有到目标网段的路由
    4.如果有,就转发,没有就告诉客户机不能到达

步骤图:

步骤:

1、主机1.1要发送数据到4.1

2、路由器A收到数据,查看数据包中的目标地址为4.1,查找路由表

3、路由器A根据路由表转发数据到S0口

4、路由器B接收到数据包,查看数据包的目标地址,并查找路由表

5、路由器B根据路由表转发数据到E0口

6、主机4.1接收到数据包

 

路由器转发数据包的封装过程

路由表:

路由表路由器中维护的路由条目的集合

路由器根据路由表做路径选择

路由表格式:

目标网段        接口(下一跳)

电脑、路由器、手机等配置了IP地址的设备都有路由表

路由表里的一条记录(一行)称呼为一个路由条目

查看路由表的方式(Linux):

[root@iZ2ze3xtpuz7jd2c0ex7nzZ ~]# ip route
default via 172.31.95.253 dev eth0
169.254.0.0/16 dev eth0 scope link metric 1002
172.31.80.0/20 dev eth0 proto kernel scope link src 172.31.84.18
[root@iZ2ze3xtpuz7jd2c0ex7nzZ ~]#
#路由表里的一条记录(一行)称呼为一个路由条目[root@iZ2ze3xtpuz7jd2c0ex7nzZ ~]# route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.31.95.253   0.0.0.0         UG    0      0        0 eth0    默认路由
169.254.0.0     0.0.0.0         255.255.0.0     U     1002   0        0 eth0    直连路由
172.31.80.0     0.0.0.0         255.255.240.0   U     0      0        0 eth0    直连路由
[root@iZ2ze3xtpuz7jd2c0ex7nzZ ~]#

0.0.0.0 代表任意地址

路由表的方式(Windows)

C:\Users\23843>route printIPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数0.0.0.0          0.0.0.0      192.168.2.1     192.168.2.43     45127.0.0.0        255.0.0.0            在链路上         127.0.0.1    331127.0.0.1  255.255.255.255            在链路上         127.0.0.1    331127.255.255.255  255.255.255.255            在链路上         127.0.0.1    331192.168.2.0    255.255.255.0            在链路上      192.168.2.43    301

如果路由表里没有对应的路由条目路由器就会丢弃数据,不进行转发

路由的类型:

1、直连路由:直接和路由   

2、非直连路由

    2.1  静态路由

    2.2  动态路由

    2.3  默认路由

常用的路由类型:

1、直连路由   (directly connected)

接口配置IP地址,并且接口需要激活(端口UP状态),形成直连路由      --》自动产生

2、静态路由  (static)

需要管理员手工配置的,是单向的,因此缺乏灵活性

3、动态路由  (Dynamic)

使用动态路由协议自动学习和更新路由表的路由方式。

4、默认路由  (default)

只要配置默认网关就是添加一条默认路由,当没有匹配到合适的直连、静态、动态路由的时候,就会走默认路由,如果没有配置默认路由就会丢失数据

当路由器在路由表中找不到目标网络的路由条目时,路由器把请求转发到默认路由接口

路由的优先级:直连路由  >  静态路由  > 动态路由  >  默认路由

给路由器添加静态路由的命令

ip route   192.168.30.0   255.255.255.0                 192.168.2.1

目标网段         子网掩码                            下一跳地址

下一跳地址对应的IP

一般给末节的网络配置默认路由

给路由器添加默认路由的命令

ip route       0.0.0.0        0.0.0.0                 192.168.2.1

目标网段     子网掩码             下一跳地址

ping某网址的过程

PC0(192.168.1.1/24) --》  ping 192.168.1.254

步骤:

1、拿192.168.1.254 跟自己的子网掩码进行与运算得出目标网段 192.168.1.0

192.168.1.254
255.255.255.0

得:192.168.1.0 (目标网段)

2、查找本机里的路由表,发现走直连路由能到达,然后进行数据封装

源ip:192.168.1.1  目的ip:192.168.1.254

3、发送数据包给路由器的LAN口(默认网关)

PC0(192.168.1.1/24) --》 ping  192.168.2.1

步骤:

1、拿192.168.2.1 跟自己的子网掩码进行与运算得出目标网段 192.168.2.0

192.168.2.1
255.255.255.0

得:192.168.2.0 (目标网段)

2、查找本机里的路由表,发现静态、直连、动态路由内都没有该网段,因此走默认路由,然后进行数据封装

源ip:192.168.1.1  目的ip:192.168.2.1

根据默认路由的下一跳地址192.168.1.254,查询arp缓存表,是否有192.168.1.254的mac地址,如果有直接使用,如果没有就发arp广播得到192.168.1.254的mac地址

3、封装帧头部:  源mac地址是自己  目的mac地址是 网关的mac地址

4、将数据送到交换机,交换机会根据目的mac地址做转发,送给网关

5、数据送到了路由器的LAN口(默认网关),拿192.168.2.1 跟自己(路由器)的子网掩码进行与运算得出目标网段 192.168.2.0,路由器然后查看路由表,发现192.168.2.1是自己的直连路由,然后直接将数据包通过直连路由转发给了192.168.2.1。

故障排除:

1、分层检查

从物理层检查,查看端口状态来排除接口、线缆等问题

查看IP地址和路由等的配置是否正确

2、分段检查

将网络划分成多个小的段,逐段排除错误

课后实验:

实验成果: 

计算机网络 day7 扫描IP脚本 - 路由器 - ping某网址的过程相关推荐

  1. Mac 域名解析不了,能ping通ip,但ping不通网址

    重装mac系统后遇到一个奇怪的现象,部分网址浏览器可以访问,但却ping不通,但ping ip又能ping通.检查DNS设置似乎也正确,最后通过如下方式解决: 打开终端,输入: sudo launch ...

  2. 可以PING通IP地址 但是PING不通网址(不能上网,能上QQ、下载)的解决(转载)

    地址栏打IP地址可以上 但是打网址就不行 应该是DNS解释问题 但是不知道怎么操作 TCP/IP手动自动都试过了 还是不行 换个dns DNS加了 和这台一样的设置 以前能上的 突然就不能上了 不是我 ...

  3. 可以ping 通IP地址但ping不通网址的解决方法

    今天发现电脑上被360扫出几个恶意程序,我就随手给清除了,后来上网时才发现网页无法打开了,提示什么无法打开搜索页,用另一台电脑在网上找了半天,发现了一个可以医好的方法,省下了装系统,现分享给大家. 我 ...

  4. 计算机网络——网络层路由协议、IP组播、移动 IP、路由器

    文章目录 前言 一.RIP 协议与距离向量算法 1.RIP 协议 2.距离向量算法 二.OSPF 协议与链路状态算法 1.OSPF 协议 2.链路状态算法 三.BGP 协议和三种路由协议的比较 1.B ...

  5. 王道考研 计算机网络18 私有IP地址 网络地址转发NAT 路由器 路由表 路由转发

    私有IP地址 路由器对目的地址是私有IP地址的数据报一律不进行转发 网络地址转换NAT NAT路由器 网络层设备–路由器 输入端口对线路上收到大的分组的处理: 输出端口将交换结构传送来的分组发送到线路 ...

  6. 计算机网络课程设计之Tracert与Ping程序设计与实现

    前言 本实验主要是应用ICMP报文实现Tracert和Ping功能,主要用的是Windows中的库,所以程序只能在Windows下运行. 在博客结束的地方,附上C/C++的Tracert源码和Ping ...

  7. 计算机网络工程教程:基于cisco路由器和交换机,计算机网络工程教程—基于cisco路由器和交换机教学课件作者陆魁军chap2交换机VLAN设置v2.ppt...

    计算机网络工程教程-基于cisco路由器和交换机教学课件作者陆魁军chap2交换机VLAN设置v2.ppt (47页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方 ...

  8. 计算机网络之TCP/IP

    计算机网络之TCP/IP OSI网络结构的七层模型 通俗理解 这个模型推出的最开始,是是因为美国人有两台机器之间进行通信的需求. 需求1: 科学家要解决的第一个问题是,两个硬件之间怎么通信.具体就是一 ...

  9. python扫描端口脚本_Pyhton扫描端口脚本代码

    Pyhton扫描端口脚本代码# -*- coding:utf8 -*- #!/usr/bin/python # Program: 端口扫描 import socket, time, thread so ...

最新文章

  1. 中国顶级黑客45秒使用声音来破坏您的计算机
  2. 不影响数据库运行如何快速恢复刚删除的表及其数据(二)如何恢复刚才删除的一条数据...
  3. 《大学数学遐想》系列之后记
  4. 变量不同作用域的测试
  5. c iostream.源码_通达信《牛气冲天》指标,共振主升浪冲涨停,牛散经常用(附源码...
  6. lynda ux_举办UX午餐并学习并成为UX英雄
  7. 2020-5-9 开始阅读深入理解java虚拟机
  8. 节选转载:你敢向代码库中添加Boost你就等着被开除吧
  9. php字符编码转换问题
  10. Linux命令之远程拷贝文件scp
  11. PS裁剪图片上任意形状区域
  12. 使用nslookup查询域名的MX记录
  13. python 经纬度计算相关
  14. English--辅音
  15. 活动二维码怎么制作?如何将活动内容做成二维码图片?
  16. 移动互联网时代必读十大图书
  17. Sigar获取系统信息
  18. Geohash算法的概括
  19. 知乎宣布完成2.7亿美元融资 引入前蜜芽合伙人孙伟为CFO
  20. 30 岁后,让你走上坡路的 3 种能力

热门文章

  1. IDEA + SVN 导入eclipse项目
  2. 台式主机改装家用服务器记录
  3. 关于如何成为一名爬虫工程师
  4. eval函数和isNaN函数
  5. OpenGL与PCL库实现点云体系滤波优化及三角面片化
  6. 手动第一次上架的应用如何快速在苹果商店看到
  7. PS学习笔记——通过三种方式调整人像照片亮度
  8. 40 - xml文档与字典之间的互相转换
  9. created是什么牌子_最好用的防晒喷雾排行榜2021(防晒喷雾哪个牌子最好用)
  10. word中公式序号格式修改方法