Jack Huang's Blog


  • 首页

  • 标签

  • 归档

  • 搜索

网络拓扑自动发现的方法

发表于 2023-10-11

作为网络管理员,了解整个单位的网络拓扑结构,是保障和维护网络的基础。通常可以通过手动绘制的方式获得网络拓扑结构,但这种方法效率低,不精确,无法实时更新,因此需要一种网络拓扑自动发现的方法。下面记录一些与网络拓扑自动发现相关的方法与技术。

SNMP

SNMP是广泛应用于TCP/IP网络的网络管理标准协议,该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。

SNMP基本组件包括网络管理系统NMS(Network Management System)、代理进程(Agent)、被管对象(Managed Object)和管理信息库MIB(Management Information Base)。

snmp管理模型

图1 snmp管理模型

Nmap

Nmap(网络映射器)是一款用于网络发现和安全审计的网络安全工具。Nmap可以检测目标主机是否在线、端口开放情况、侦测运行的服务类型及版本信息、侦测操作系统与设备类型等信息。 它是网络管理员必用的软件之一,用以评估网络系统安全。

Traceroute

Traceroute命令是TCP/IP家族内另一个比较早的工具,它可用来发现测试点 和目标主机之间的路由器。路由器在转发包之前总是将其TTL值减1,如果TTL降为0,则路由器向源地址发送TTL-Expired ICMP消息。

Ping

Ping命令是IP网上最古老的一种工具,用来监测网络节点是否活着,或用于监测到网络节点间的往返时延(RTT)。通常Ping只涉及网络上的源和目的两节点,而忽略网络细节。另外我们可以使用广播 Ping,其Ping的地址不是一个单一的地址,而是子网的广播地址,所有位于该子网的主机均对此Ping包进行响应,从而一次就可得到子网内的全部活动主机。

参考链接

  1. 一种网络拓扑自动获取的方法,by 马黎黎,梁鹏飞.
  2. 什么是SNMP?,by huawei.
  3. Nmap,by wikipedia.

x3py插件框架学习笔记

发表于 2023-09-28 | 更新于 2023-10-11

x3py是一个可与Python等集成的轻量级C++插件框架。该框架使用了少部分STL,没有使用MFC、ATL、COM。x3py 通过使用 SWIG,可与 Python 等语言进行集成(当然可以单独使用C++)。使用此框架可以快速开发出更多的插件和应用软件,此框架已在 Windows/Linux/MacOSX 上测试过。

插件原理

请参考:

  • 插件原理
  • 事件驱动机制(Observer)

参考链接

  1. x3py wiki,by rhcad.
  2. 插件原理,by rhcad.
  3. c++插件机制的实现原理、过程、及使用 ,by 特立独行的猫a.
  4. 事件驱动机制(Observer),by rhcad.

华为交换机配置学习笔记

发表于 2023-09-14 | 更新于 2023-10-18

学习一下网络交换机配置的知识,记录一下。

eNSP简介

eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化的网络设备仿真平台,主要对企业网路由器、交换机、WLAN等设备进行软件仿真,完美呈现真实设备部署实景,支持大型网络模拟,让你有机会在没有真实设备的情况下也能够开展实验测试,学习网络技术。

eNSP具体安装过程请参考:

  • ENSP安装教程【手把手教学】
  • 解决VirtualBox Host-Only NetWork #2问题
  • 使用VirtualBox打开虚拟机报错:Raw-mode is unavailable courtesy of Hyper-V
  • 5 Ways to Fix ‘Virtual machine has terminated unexpectedly’ Error

VRP简介

常用场景

IP与Mac绑定

具体流程如下:

  1. 查看目标IP将要接入的交换机管理IP。
  2. 登录接入层交换机
  3. 进入交换机系统视图,静态绑定IP与Mac地址

具体命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
telnet 192.168.0.111
> display current-configuration
# 查看mac要绑定的交换机端口
> display mac-address | include c03f-abcd-cc92
# 查看路由表
> display ip routing-table
> system-view
] interface GigabitEthernet 0/0/8
# 查看交换机网口配置
] display this
# 使能动态arp检测功能
] arp anti-attack check user-bind enable
# 使能ip报文检查功能
] ip source check user-bind enable
] display this
# 以下命令可将IP、Mac、Interface、Vlan进行绑定
] user-bind static ip-address 10.0.0.32 mac-address c03f-abcd-cc92 interface GigabitEthernet 0/0/8 vlan 8
] quit
> save

IP与Mac解绑

具体命令如下:

1
2
3
telnet 192.168.0.111
> system-view
] undo user-bind static ip-address 10.0.0.32 mac-address c03f-abcd-cc92 vlan 8

参考链接

  1. HCNA网络技术实验指南,by 华为技术有限公司.
  2. ENSP安装教程【手把手教学】,by 黑城笑.
  3. 解决VirtualBox Host-Only NetWork #2问题,by King.
  4. 使用VirtualBox打开虚拟机报错:Raw-mode is unavailable courtesy of Hyper-V,by yanjian_0809.
  5. 5 Ways to Fix ‘Virtual machine has terminated unexpectedly’ Error,by Kevin Arrows.

VSCode常用插件推荐

发表于 2023-09-12

Visual Studio Code(简称VS Code)是一个由微软开发,同时支持Windows 、 Linux和macOS等操作系统且开放源代码的代码编辑器。与Sublime相比,VSCode开源,且有强大的社区支持,各种插件层出不穷。下面记录一些常用的VSCode插件。

Hex Editor

可以二进制形式查看编辑文件内容。例如,可方便查看同样汉字在不同字符编码下对应的二进制。

参考链接

  1. VS code常用插件推荐(总结整理篇),by 苏梦苓​.

nodejs参考架构

发表于 2023-09-05

JavaScript 生态系统是快速发展且充满活力的,但是各种各样的选项可能会使在 Node.js 包之间进行选择变得非常困难。因此,拥有参考架构可以帮助团队避免一次又一次地重新学习相同的内容。

日志记录工具

Pino 是非常低的开销node.js日志记录器。

Pino with Express

1
npm install pino-http
1
2
3
4
5
6
7
8
9
10
11
const app = require('express')()
const pino = require('pino-http')()

app.use(pino)

app.get('/', function (req, res) {
req.log.info('something')
res.send('hello world')
})

app.listen(3000)

代码一致性工具

ESLint 用于检查JavaScript代码是否符合规则,由Nicholas C. Zakas在2013年创建。

选择 Web 框架

构建企业Node.js应用程序时做出的关键选择之一是将作为其基础的 Web 框架。而 Express.js 是一个不错的默认选择。

代码覆盖率

代码覆盖率是一种软件测试指标,它确定项目中有多少代码在测试过程下已成功验证,这反过来又有助于分析软件验证的彻底程度。

  • nyc,可能是最流行的代码覆盖率工具。该模块最受欢迎的主要原因之一是它与大多数 JavaScript 测试框架都能很好地配合。nyc是 的后继命令行界面 (CLI) istanbul。
  • Jest,当您使用该选项运行该工具时,它会生成覆盖范围–coverage。

测试示例

以nyc为例,该示例由文件中的两个简单函数以及使用Mocha 测试运行程序index.js的目录中的测试组成。

第一个函数将两个数字相加:

1
2
3
4
5
function addTwoNumbers(x, y) {

return x + y;

}

这个函数可以通过这个简单的测试轻松覆盖:

1
2
3
4
5
6
7
8
9
describe('testing for coverage', () => {

it ('should add 2 numbers correctly', () => {

assert.equal(addTwoNumbers(1,1), 2);

});

});

参考链接

  1. Why we developed the Node.js reference architecture,by redhat.
  2. Introduction to the Node.js reference architecture, Part 7: Code coverage,by redhat.

Python从PE文件中导出资源文件

发表于 2023-08-16 | 更新于 2024-06-18

最近需要修改一个QT编写的应用,就是将资源图片修改一下,但是资源图片被打包到DLL的.rdata段中,无法直接导出,于是想通过Python直接读取导出,然后定位需要修改图片的位置。具体代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
# -*- coding:utf-8 -*-

import os,sys,re

def find_all_pos(filename,feature):
"""打开二进制文件,搜索指定特征的位置,并返回所有位置的列表
"""
with open(filename, 'rb') as binFile:
binFileStr = binFile.read()
posArray = [m.start() for m in re.finditer(feature, binFileStr)]
return posArray

def export_all_png(filename,posArray):
"""打开二进制文件,根据特征位置数组,导出所有的PNG文件
"""
with open(filename, 'rb') as binFile:
for i in range(len(posArray)-1):
pngLen = posArray[i+1] - posArray[i]
# print(pngLen)
binFile.seek(posArray[i])
pngFileBin = binFile.read(pngLen)
pngFile = open("res\\"+str(i)+".png", "wb")
pngFile.write(pngFileBin)

def find_feature_pos(filename,feature):
"""打开二进制文件,搜索指定特征最早出现的位置,并返回结果
"""
with open(filename, 'rb') as binFile:
binFileStr = binFile.read()
result = re.search(feature,binFileStr)
try:
return result.span(0)[0]
except:
return -1

def merge_new_file(filename,feature_pos):
"""打开二进制文件,提取特征之后的数据,与新的文件头合并
"""
file_header=b"\x44\x55\x66"
with open(filename, 'rb') as binFile:
binFile.seek(feature_pos)
datFileBin = binFile.read()
datFile = open(filename[:-4]+"_new"+filename[-4:], "wb")
datFile.write(file_header)
datFile.write(datFileBin)

def walk_files(src_filepath = ".", file_name_feature=".exe"):
"""遍历目录中的文件,提取指定特征的文件
"""
filepath_list = []

for root, dirs, files in os.walk(src_filepath):
for file in files:
if file.endswith(file_name_feature)==False:
continue
if root == '.':
root_path = os.getcwd() + "/"
else:
root_path = root

if (root_path != src_filepath) and (root != '.'):
filepath = root_path + "/" + file
else:
filepath = root_path + file

if filepath not in filepath_list:
filepath_list.append(filepath)

return filepath_list

if __name__ == "__main__":
for path in sys.argv[1:]:
if os.path.isfile(path):
posArray = find_all_pos(path,b"\x89\x50\x4E\x47\x0D\x0A\x1A\x0A")
# 位置数组应该大于1
if(len(posArray)>1):
# print(posArray)
if(os.path.exists("res")==False):
os.makedirs("res")
pngList=""
for i in range(len(posArray)):
pngList = pngList + str(i) + ",0x%x"%posArray[i] +"\n"
# 保存图片位置信息
pngFileMeta = open("res\\pnglistpos.csv", "w")
pngFileMeta.write(pngList)

export_all_png(path,posArray)

运行时采用如下命令:

1
2
3
python -m venv env
.\env\Scripts\activate
python utf8_to_gbk.py filepath

参考链接

  1. PNG文件格式详解,by oriole.
  2. Python输出列表list,by huang_0430.
  3. python创建目录(文件夹),by FanWinter.
  4. python 数字 十六进制 打印,by wowocpp.
  5. python文件的打开、读取、关闭、写入与二进制文件的读写操作,by aliyun.
  6. How to find all occurrences of a substring?,by stackoverflow.
  7. 如何逆向解决QT程序汉化中的乱码问题-干货,by 葫芦娃很厉害.
  8. 如何汉化一个软件,by CCDebuger.
  9. Qt 资源系统(Qt Resource System),by 南理汉子.

Web服务器配置方法记录

发表于 2023-08-03 | 更新于 2023-08-08

常用的Web服务器主要有Apache和Ngnix,下面记录其配置方法。

Apache Web服务器

Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器软件,可以在大多数电脑操作系统中运行。由于其跨平台和安全性,被广泛使用,是最流行的Web服务器软件之一。它快速、可靠并且可通过简单的API扩展,将Perl/Python等解释器编译到服务器中。

httpd.conf配置

Apache的主配置文件是httpd.conf。

httpd-vhosts.conf配置

Apache虚拟主机的配置文件是httpd-vhosts.conf。

问题清单

  • Apache配置虚拟主机后,不能访问localhost,但使用127.0.0.1可以访问的问题

请参考Apache配置虚拟主机后,不能访问localhost的问题。

Ngnix Web服务器

Nginx(发音同“engine X”)是异步框架的网页服务器,也可以用作反向代理、负载平衡器和HTTP缓存。该软件由俄罗斯程序员伊戈尔·赛索耶夫(Игорь Сысоев)开发并于2004年首次公开发布。2011年成立同名公司以提供支持服务。2019年3月11日,Nginx公司被F5网络公司以6.7亿美元收购。

nginx.conf配置

Nginx的主配置文件是nginx.conf,这个配置文件一共由三部分组成,分别为全局块、events块和http块。在http块中,又包含http全局块、多个server块。每个server块中,可以包含server全局块和多个location块。在同一配置块中嵌套的配置块,各个之间不存在次序关系。

参考链接

  1. Apache配置文件httpd.conf详解,by garyond.
  2. Apache配置文件详解,by 思忆技术.
  3. Apache httpd.conf配置文件 3(虚拟主机),by 乌托邦眺望.
  4. Apache HTTP服务器,by wikipedia.
  5. Nginx配置文件详解,by 程序员自由之路.
  6. 万字长文看Nginx配置详解!,by 大江狗.
  7. Nginx,by wikipedia.
  8. Apache配置虚拟主机后,不能访问localhost的问题,by LauEl.

Windows程序反调试技术笔记

发表于 2023-07-27

最近在使用IDA和X64dgb调试Windows可执行程序时,老是失败,严重怀疑其使用了反调试技术。因此学习一下Windows程序反调试技术,以期望能解决Windows可执行程序动态调试失败的问题。

静态反调试技术

进程状态检测

调试环境检测

动态反调试技术

时钟检测

异常处理

0XCC探测

硬件断点检测

自调试

单步检测

参考链接

  1. Windows下反(反)调试技术汇总,by topsec.

Python文本文件编码格式批量转换

发表于 2023-07-11 | 更新于 2023-08-17

最近获得一个Matlab高版本的项目代码,其文本文件时utf8编码格式,而我的Matlab版本比较低,只支持gbk编码格式,于是采用Python批量转换文本编码格式。代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import os,sys

extArray=(".m",".txt")

def convert( filename, in_enc = "UTF-8", out_enc="GBK" ):
try:
print("convert " + filename)
targetFile = open(filename,'r',encoding=in_enc)
content = targetFile.read()
targetFile.close()

targetFile = open(filename,'w',encoding=out_enc)
targetFile.write(content)
targetFile.close()
except:
targetFile.close()


def explore(dir):
for root, dirs, files in os.walk(dir):
for file in files:
path = os.path.join(root, file)
if(path.endswith(extArray)):
convert(path)

def main():
for path in sys.argv[1:]:
if os.path.isfile(path):
convert(path)
elif os.path.isdir(path):
explore(path)

if __name__ == "__main__":
main()

运行时采用如下命令:

1
2
3
python -m venv env
.\env\Scripts\activate
python utf8_to_gbk.py filepath

参考链接

  1. Python遍历路径下文件并转换成UTF-8编码,by weixin_33826268.
  2. Python 批量转换文件编码格式,by huang_0430.
  3. GB2312、GBK、GB18030 这几种字符集的主要区别是什么?,by zhihu.
  4. 一图弄懂ASCII、GB2312、GBK、GB18030编码,by horstxu.
  5. Unicode、UTF-8、UTF-16 终于懂了,by LinuxThings.

提取安卓已安装应用APK文件的方法

发表于 2023-06-15

需要从安卓系统中已安装的APP中提取出APP的安装包,因此研究了以下。

安装adb

下载adb:

https://dl.google.com/android/repository/platform-tools-latest-windows.zip

配置环境变量PATH

提取Apk

提取Apk的步骤如下:

  • 用usb数据线连接手机和电脑,启用手机开发模式,设置usb调试模式
  • 在cmd窗口中输入命令adb devices,查看手机和电脑是否连接成功
  • 执行 adb shell pm list packages 命令,查看需要提取的APP
  • 执行 adb shell pm path package_name 命令,获取APP安装路径
  • 执行 adb pull 安装包路径 输出路径 命令,生成APP的apk安装文件

参考链接

  1. windows下载安装adb(极其简单),by x2584179909.
  2. adb的安装和使用,by GX8010.
  3. 安卓提取apk安装包,by juejin.
  4. 从Android 手机取出已安装apk文件,by 雨打芭蕉.
上一页1…8910…52下一页

Jack Huang

519 日志
66 标签
© 2025 Jack Huang
由 Hexo 强力驱动
|
主题 — NexT.Muse