python获取网络信息

第1关:获取MAC地址

任务描述

本关任务:用Python获取本机Mac地址并输出。

相关知识

为了完成本关任务,你需要掌握: 1.如何获取MAC地址; 2.如何处理字符串。

获取Mac地址

MAC地址也称物理地址,它是一个用来确认网络设备位置的地址。在OSI模型中,第三层网络层负责IP地址,第二层数据链接层则负责MAC地址。MAC地址用于在网络中唯一标示一个网卡,一台设备若有一或多个网卡,则每个网卡都需要并会有一个唯一的MAC地址。

查看mac地址的方法

  • 常见的网络命令:
    • windows 命令:ipconfig
    • linux命令:ifconfig
  • 程序来获取MAC地址。

下面介绍如何使用python获取本机的MAC地址。

1.uuid模块

UUID(Universally Unique Identity)的缩写,是一种软件建构的标准,通常由32字节16进制数表示(128位),它可以保证时间和空间的唯一性。 Python有一个名为uuid(通用唯一标识符)的库,用于生成128位的随机对象。该库根据系统时间和计算机的网络地址生成唯一的id。uuid(对象是不可变的,它包含一些用于创建各种唯一id的函数。uuid常用于:基于id的MAC地址、创建唯一的随机id、加密哈希值或随机文档等。

UUID由五个组件组成,每个组件都有固定的长度。连字符将各个部分分开。

UUID的格式“ 8-4-4-4-12”, 如:“ 00000000-0000-0000-0000-000000000000”

用uuid可以获取本机网关的MAC地址,方法介绍如下:

2.获取MAC地址的相关方法
uuid.getnode()

获取硬件的MAC地址,并以48位长度的正整数(十进制)形式返回,如果一个机器有多个网络接口,可能返回其中的任一个。

uuid.uuid1(node=None, clock_seq=None)

node和clock_seq是可选参数 node是硬件地址,它是一个48位正整数。如果未给出节点,则使用 uuid.getnode() 功能来获取当前主机的通用管理的MAC地址。 如果给定clock_seq,它将用作序列号。否则,选择一个随机的14位序列号。

示例如下:

mac = uuid.uuid1()

输出(16进制): UUID('a82b2eb0-abcd-eaec-8a35-0657e38e6a7d')

类型为:UUID类型

可以将其转换为字符串: str(mac)

其中后12位即:0657e38e6a7d,某网关的MAC地址。

mac = uuid.UUID( int=uuid.getnode() )

输出(16进制): UUID('00000000-0000-0000-0000-0657e38e6a7d')

类型为:UUID类型

可以将其转换为字符串: str(mac)

其中后12位即:0657e38e6a7d,某网关的MAC地址。

字符串处理常用方法举例
`join(seq)`

以指定字符串作为分隔符,将 seq 中所有的元素(的字符串表示)合并为一个新的字符串。 示例:

s1 = "-"
seq = ("h", "e", "l", "l", "o") # 字符串序列
print (s1.join(seq))

输出结果:

h-e-l-l-o
`len(string)`

 返回字符串长度。

split(str="", num=string.count(str))

str — 分隔符;

num — 分割次数。默认为 -1, 即分隔所有。

示例: 

str = "this is string example"
print (str.split( ))       # 以空格为分隔符
print (str.split('i',1))   # 以 i 为分隔符
print (str.split('a'))     # 以 a 为分隔符 

输出结果:

['this', 'is', 'string', 'example']
['th', 's is string example']
['this is string ex', 'mple'] 
[ : ]

 截取字符串中的一部分,遵循左闭右开原则,str1[0:2] 是不包含第 3 个字符的。示例:

str1 = "this is string example"
print(str1[0:2])

 输出结果:

th

编程要求

根据提示,在右侧编辑器补充代码,

1、获取并输出计算机的MAC地址(十六进制)。

如: xxxxxxxxxxxx

测试说明

平台会对你编写的代码进行测试:

开始你的任务吧,祝你成功!

import uuid

# ********Begin********#
# 1、获取MAC地址(十六进制)
mac = uuid.uuid1()
# 2、将1中获取的结果转化为字符串类型
mac = str(mac)
# 3、字符串类型截取后12位
str1 = mac[-12:]
# 4、输出MAC地址
print(str1)

# ********End********#

# 经典阅读理解题,根据题中意思照抄就行

第2关:获取主机名称和ip地址 

任务描述

本关任务:

1、用Python获取主机名并输出;

2、用Python获取ip地址并输出。

相关知识

为了完成本关任务,你需要掌握:

1.socket基本知识;

2.如何获取主机名和IP。

socket相关知识

网络上的两个程序通过一个双向的通信连接实现数据交换,这个连接的一端称为一个socket。socket通常被叫做“套接字”,用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。

  • python中的socket库提供了处理公共传输的特定类,以及一个用于处理其余部分的通用接口。
  • socket是内置库,无需安装;

socket库的函数举例:

gethostname() 

返回主机名,示例:

socket.gethostname()
gethostbyname('主机名')

 将主机名转换为ipv4地址

gethostbyname_ex('主机名')

返回主机名、主机别名列表、主机IP地址列表

编程要求

根据提示,在右侧编辑器补充代码:获取并输出计算机的主机名和IP地址;

测试说明

平台会对你编写的代码进行测试:

开始你的任务吧,祝你成功!

import socket

# ********Begin********#
# 1、获取主机名
hostname = socket.gethostname()

# 2、获取IP
ip = socket.gethostbyname_ex(hostname)

print("主机名:", hostname)
print("IP:", ip)
# ********End********#

# 还是阅读理解,注意要获取ip地址的时候不能直接照抄阅读材料,参考主机名获取方式

第3关:保存/打开网络信息文件

任务描述

当程序运行时,变量是保存数据的好方法,但变量、序列以及对象中存储的数据是暂时的,程序结束后就会丢失,如果希望程序结束后数据仍然保持,就需要将数据保存到文件中。 Python 提供了内置的文件对象,以及对文件、目录进行操作的内置模块,通过这些技术可以很方便地将数据保存到文件(如文本文件等)中。

本关任务:

1、将第二关获取的主机名和IP地址写入文件;

2、读取文件并输出文件内容。

相关知识

为了完成本关任务,你需要掌握:

1、文件路径;

2、Python文件读写操作。

文件

关于文件,它有两个关键属性:

  • “文件名”:为每个文件设定的名称;
  • “路径”:指明文件在计算机上的位置。

示例1:

(windows系统上,D盘myfile文件夹下有个test.txt文件)

文件路径为:D:\myfile\

文件名为: test.txt

说明:在 Windows 上,路径书写使用反斜杠 “” 作为文件夹之间的分隔符。但在 OS X 和 Linux 上,使用正斜杠 “/” 作为它们的路径分隔符。

示例2:

(linux系统上,myfile文件夹下有个test.txt文件)

文件路径为:/myfile

文件名为: test.txt

绝对路径与相对路径

明确一个文件所在的路径,有 2 种表示方式,分别是:

  • 绝对路径: 从根文件夹开始。

Window 系统中以盘符(C:、D:)作为根文件夹; 而 OS X 或者 Linux 系统以 / 作为根文件夹。

  • 相对路径: 文件相对于当前工作目录所在的位置。

例1:当前工作目录为 “C:\Windows\System32″,若文件 demo.txt 就位于这个 System32 文件夹下,则 demo.txt 的相对路径表示为 “.\demo.txt”, 其中 .\ 就表示当前所在目录; 同时“..\” 表示当前所在目录的父目录。

例2:当前工作目录为 “/data/workspace/myshixun/src”,若文件 demo.txt 就位于这个 src 文件夹下,则 demo.txt 的相对路径表示为 “./demo.txt”,其中 ./就表示当前所在目录; 同时“../” 表示当前所在目录的父目录。

Python文件操作

Python 中,对文件的操作有很多种,常见的操作包括创建、删除、修改权限、读取、写入等,这些操作可大致分为以下 2 类:

  • 系统级操作:删除、修改权限,作用于文件本身;
  • 应用级操作:写入、读取,是文件最常用的操作。

文件的应用级操作可以分为以下 3 步,每一步都需要借助对应的函数实现:

  • 1、打开文件

open() 函数用于创建或打开指定文件,该函数的常用语法格式如下:

file = open(file_name [, mode='r' [ , buffering=-1 [ , encoding = None ]]])
  • file_name:要创建或打开文件的文件名称,该名称要用引号(单引号或双引号都可以)括起来。需要注意的是,如果要打开的文件和当前执行的代码文件位于同一目录,则直接写文件名即可;否则,此参数需要指定打开文件所在的完整路径。
  • mode:可选参数,用于指定文件的打开模式。可选的打开模式:如:
  • r 只读模式打开文件;
  • w 以只写模式打开文件,若该文件存在,打开时会清空文件中原有的内容;
  • 如果不写,则默认以只读(r)模式打开文件。
  • buffering:可选参数,用于指定对文件做读写操作时,是否使用缓冲区。
  • encoding:可选参数,手动设定打开文件时所使用的编码格式。

示例:

f = open("./a.txt", w)
print(f)
  • 2、对已打开文件做读/写操作

  • 读取文件内容

可使用 read()、readline() 以及 readlines() 函数 read() :逐个字节(或者逐个字符)读取文件中的内容; readline() :用于读取文件中的一行; readlines(): 用于读取文件中的所有行。 示例:

f = open("./test.txt",'r')
data = f.readlines()
print(data)
  • 向文件中写入内容

write() :可以向文件中写入指定内容; 示例:

f = open("./test.txt", 'w')
f.write("写入的数据")
  • 3、关闭文件

完成对文件的读/写操作之后,最后需要关闭文件。 使用 close() 函数关闭文件。 示例:

f.close()

编程要求

根据提示,在右侧编辑器补充代码,

1、将第二关获取的主机名和IP地址写入文件,文件存储路径为’/data/workspace/myshixun/src/step3’,文件名为’test.txt’;

2、读取test.txt,并输出文件内容。

测试说明

平台会对你编写的代码进行测试:

开始你的任务吧,祝你成功!

import socket

# 获取主机名
hostname = socket.gethostname()
# 获取IP
ip = socket.gethostbyname(hostname)
# ********Begin********#
# 1、写入文件
f = open('/data/workspace/myshixun/src/step3/test.txt', "w")
f.write(hostname)
f.write(ip)
f.close()
# 2、读取文件
f = open('/data/workspace/myshixun/src/step3/test.txt', "r")

# 3、输出文件内容
print(f.read())
f.close()
# ********End********#

# 具体的没啥说的,还是阅读理解,就是别照抄阅读材料就好

版权声明:本文为博主作者:在远方的眺望原创文章,版权归属原作者,如果侵权,请联系我们删除!

原文链接:https://blog.csdn.net/revolutionordied/article/details/135201417

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
青葱年少的头像青葱年少普通用户
上一篇 2024年1月3日
下一篇 2024年1月3日

相关推荐