大开眼界:Netbios 上古时代如何用一个参数实现一个世界 负面典型
今天的程序员普遍遵循这样的接口设计原则:通过不同的接口名和参数列表准确表达不同的功能。
这似乎是理所当然的,然而上古时代却并非如此,比如Netbios协议整个协议的接口只有一个函数、一个参数!
当初是基于什么原则这样设计不晓得,但它确实真真实实地存在过,最初是在windows 2000上实现的,到了windows vista就被淘汰。
我之所以用到这个东西是为了取得局域网上的机器名,代码如下:
//取得MACHNAME
STATE getmachname(char * ip,char * machname,int machnamelen)
{if(machnamelen<16){return -1;}//以下使用sockethostent * phost;unsigned long addr;if(INADDR_NONE==(addr=inet_addr(ip)))return -1;if(NULL!=(phost=gethostbyaddr((char *)&addr,4,PF_INET))){if((int)strlen(phost->h_name)>=machnamelen)return -1;else{strcpy(machname,phost->h_name);return 1;}}//以下使用NetBIOSchar ncb_buffer[sizeof(ADAPTER_STATUS)+256*sizeof(NAME_BUFFER)];UCHAR ret;NCB ncb;ADAPTER_STATUS * adapter_status;NAME_BUFFER * name_buffer;int lanacount;memset(&ncb,0,sizeof(NCB));memset(ncb_buffer,0xa3,sizeof(ADAPTER_STATUS)+256*sizeof(NAME_BUFFER));adapter_status=(ADAPTER_STATUS *)ncb_buffer;name_buffer=(NAME_BUFFER *)(ncb_buffer+sizeof(ADAPTER_STATUS));ncb.ncb_lana_num=0;ncb.ncb_lsn=0;ncb.ncb_num=0;ncb.ncb_command=NCBRESET;
// if(NRC_GOODRET!=(ret=Netbios(&ncb))){
// return -2;}for(lanacount=0;lanacount<=0;lanacount++){memset(&ncb,0,sizeof(NCB));memset(ncb_buffer,0xa3,sizeof(ADAPTER_STATUS)+256*sizeof(NAME_BUFFER));//设置输入ncb.ncb_command=NCBASTAT;ncb.ncb_buffer=(unsigned char *)ncb_buffer;ncb.ncb_length=sizeof(ADAPTER_STATUS)+256*sizeof(NAME_BUFFER);memset((char *)ncb.ncb_callname,' ',15);ncb.ncb_callname[15]='\0';memcpy((char *)ncb.ncb_callname,ip,strlen(ip));//预先设置输出(无意义)name_buffer->name[0]='\0';ncb.ncb_lana_num=(UCHAR)lanacount;if(NRC_GOODRET==(ret=Netbios(&ncb))){break;}else{// showret(ret);}}if(0<lanacount){return -3;}memcpy(machname,name_buffer[0].name,16);return 1;
}
因为取机器名比较困难,所以我同时使用了socket函数和Netbios。具体代码无关紧要了,因为早已经过时,主要目的是看看Netbios接口有多令人震惊。
Netbios接口如下:
UCHAR Netbios(PNCB pncb
);
好简洁啊!真是令人赞叹!
只有一个参数,是个指针,指向这个:
typedef struct _NCB {UCHAR ncb_command;UCHAR ncb_retcode;UCHAR ncb_lsn;UCHAR ncb_num;PUCHAR ncb_buffer;//这是个指针WORD ncb_length;UCHAR ncb_callname[NCBNAMSZ];UCHAR ncb_name[NCBNAMSZ];UCHAR ncb_rto;UCHAR ncb_sto;void()(_NCB *) * ncb_post;//这里又是一个指针UCHAR ncb_lana_num;UCHAR ncb_cmd_cplt;
#if ...UCHAR ncb_reserve[18];
#elseUCHAR ncb_reserve[10];
#endifHANDLE ncb_event;
} NCB, *PNCB;
这个结构里面还包括一个指向这种结构的指针,也就是可以无限级联下去。
第一个成员ncb_command是命令,我大概数了一下,有26种命令,也就是这个结构有26种解释。
每种命令仅仅使用其它成员的一小部分。其中ncb_buffer指针指向的结构视命令不同而不同。比如某个命令要求ncb_buffer指向这个结构:
typedef struct _SESSION_HEADER {UCHAR sess_name;UCHAR num_sess;UCHAR rcv_dg_outstanding;UCHAR rcv_any_outstanding;
} SESSION_HEADER, *PSESSION_HEADER;
类似的结构体有八个。
虽说按照说明书往下啃是可以理解全部的,但确实有一种啃单片机手册的感觉。
这个东西被淘汰了,该!
(这里是结束)
相关文章:
大开眼界:Netbios 上古时代如何用一个参数实现一个世界 负面典型
今天的程序员普遍遵循这样的接口设计原则:通过不同的接口名和参数列表准确表达不同的功能。 这似乎是理所当然的,然而上古时代却并非如此,比如Netbios协议整个协议的接口只有一个函数、一个参数! 当初是基于什么原则这样设计不晓得…...
el-table制作表格,改变表格的滚动条样式
// 改变滚动条相关样式 *::-webkit-scrollbar {width:10px; height:0px; background-color:transparent;} /*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ *::-webkit-scrollbar-track {background-color: rgba(0,0,0,0.3); } /*定义滚动条轨道 内阴影圆角*/ *::-web…...
Cmd报错:No module named ‘pip’
目录 1、问题描述2、问题原因3、问题解决 1、问题描述 今天在cmd命令行安装Twisted的扩展包whl文件时报错: ...... ModuleNotFoundError: No module named pip2、问题原因 升级pip时命令使用错误 3、问题解决 1) 重装pip python -m ensurepip2&#x…...
python输出奇数:如何使用Python输出奇数?
Python输出奇数的方法有很多种,下面给出一种使用for循环的实现方式:上述代码的输出结果为: Python输出奇数的方法有很多种,下面给出一种使用for循环的实现方式: # 定义一个变量n,表示要输出的奇数的最大值…...
2023 NewStarCTF --- wp
文章目录 前言Week1MiscCyberChefs Secret机密图片流量!鲨鱼!压缩包们空白格隐秘的眼睛 Web泄露的秘密Begin of UploadErrorFlaskBegin of HTTPBegin of PHPR!C!E!EasyLogin CryptobrainfuckCaesars SecertfenceVigenrebabyrsaSmall dbabyxorbabyencodin…...
一键切换IP地址:电脑IP更改的简便方法
今天我要和大家分享一个电脑IP更改的简便方法——一键切换IP地址。如果您想要更改电脑的IP地址,无需繁琐的设置和复杂的步骤,只需使用以下简单的方法,即可轻松实现IP地址的切换。让我们开始吧! 1、使用批处理脚本 批处理脚本是一…...
计算机相关内容的网站主题说明书
1. 网站名称: 中职计算机学堂 2. 网站目标: 主要目标:为中职学生提供计算机基础教程、编程入门、IT技能培训。次要目标:鼓励学生发表自己的作品,交流技术问题,构建IT爱好者社区。 3. 目标受众࿱…...
zabbix监控项
一、监控项(items) 1、获取监控数据的方式: ① zabbix-agent:代理程序是在被监控主机上运行的软件,负责收集和报告有关主机性能和状态的数据,监控系统通过与代理程序通信来获取数据。 ② SNMP࿱…...
Java基础面试-重载和重写的区别
重载:发生在同一个类中,方法名必须相同,参数类型不同、个数不同、顺序不同,方法返回值和访问修饰符可 以不同,发生在编译时。 重写:发生在父子类中,方法名、参数列表必须相同,返回值范围小于等于父类&…...
记一次生产大对象及GC时长优化经验
最近在做一次系统整体优化,发现系统存在GC时长过长及JVM内存溢出的问题,记录一下优化的过程 面试的时候我们都被问过如何处理生产问题,尤其是线上oom或者GC调优的问题更是必问,所以到底应该如何发现解决这些问题呢,用真实的场景实操ÿ…...
Vue项目为页面添加水印效果
最近在做项目,有这样要求,需要在指定容器中添加水印,也可不设置容器,如果没有容器,则添加在整个页面中,即body,当接到这个需求的时候我第一想的方法就是用canvas来实现,话不多说搞起…...
两数之和
给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…...
试过GPT-4V后,微软写了个166页的测评报告,业内人士:高级用户必读
一周之前,ChatGPT迎来重大更新,不管是 GPT-4 还是 GPT-3.5 模型,都可以基于图像进行分析和对话。与之对应的,多模态版GPT-4V模型相关文档也一并放出。当时 OpenAI 放出的文档只有18页,很多内容都无从得知,对…...
使用Python构造VARIMA模型
简介 VARMA(p,q)结合了VAR和VMA模型,其中p是向量自回归(VAR)模型的滞后期数,q是VMA模型的移动平均的阶数。 VARMA是ARMA的推广,它将ARMA模型扩展到多个时间序列变量的情况,通过VAR和VMA的线性组合来描述多个时间序列变量之间的联…...
Java基于SpringBoot+Vue的考研资讯平台
1 简介 大家好,我是程序员徐师兄,今天为大家带来的是Java基于SpringBootVue的考研资讯平台 Java基于SpringBoot的考研资讯平台,在系统当中学生可以根据不同的信息来实现该网站的考研资讯平台信息的管理。 系统主要分为前台和后台。主要包括…...
信钰证券:9月以来A股20家银行 获机构不同批次调研
Wind数据显现,自9月份以来,已经有20家银行获安排不同批次调研。其间常熟银行、瑞丰银行被调研次数较多,别离为20次、11次;宁波银行、渝农商行获安排调研家数居前,别离为206家、128家。从上市银行宣布的调研情况来看&am…...
应用商店优化的好处有哪些?
应用程序优化优势包括应用在商店的可见性和曝光度,高质量和被相关用户的更好发现,增加的应用下载量,降低用户获取成本和持续增长,增加应用收入和转化率以及全球受众范围。 1、提高知名度并在应用商店中脱颖而出。 如果用户找不到…...
MacOS Pro笔记本硬盘升级纪实
背景 MacPro 2015 mid的苹果本,忽然心血来潮想升级一下SSD。三个步骤:做启动盘,时间机器备份,插新的SSD盘恢复。 过程 下载MacOS,macOS Monterey 12.7官方原版镜像: https://swcdn.apple.com/content/do…...
景联文科技:3D点云标注应用场景和专业平台
3D点云技术之所以得到广泛发展和应用,主要是因为它能够以一种直观、真实和全面的方式来表示和获取现实世界中的三维信息。 3D点云的优势: 真实感和立体感:3D点云数据能够呈现物体的真实感和立体感,使观察者能够更直观地理解物体的…...
基于R语言的水文、水环境模型优化技术及快速率定方法
【阅读原文】:基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例实践 【内容简介】: 专题一、最速上升法、岭分析以及响应曲面模型 1.最速上升路径 2.信赖域 3.响应面模型 4.二阶响应面 5.岭分析 专题二、Kriging插值与优化方法 …...
史上最快破 10 万 Star!Claude Code Python 重写版震撼上线!
文章目录 📖 介绍 📖 🏡 演示环境 🏡 📒 史上最快10万Star项目 📒 📝 事件始末 🔧 项目架构 🗂️ 目录结构 ⭐ Rust工作区模块 🚀 快速开始 📦 Python版 🦀 Rust版 💡 核心特色 🎯 清洁室重写 🔄 AI辅助开发 📊 Rust性能优化 🌟 项目影响力 …...
RocketMQ的“三高”架构设计
RocketMQ的“三高”架构设计,主要围绕高可用、高吞吐、高扩展三个维度展开,分别解决服务不中断、性能不瓶颈、规模不设限的核心问题。1 高可用(High Availability)高可用的目标是确保部分组件故障时,消息服务依然可用&…...
从概念到应用:基于openclaw101.dev功能构思在快马平台构建实战项目
今天想和大家分享一个实战项目经验——如何快速将openclaw101.dev这类技术理念转化为可交互的实际应用。最近我在InsCode(快马)平台上尝试构建了一个任务管理中心SPA,整个过程意外地顺畅,特别适合想快速验证产品原型的开发者。 项目构思 我选择了任务管理…...
30美元终极方案:揭秘如何将普通眼镜快速改造成AI智能眼镜
30美元终极方案:揭秘如何将普通眼镜快速改造成AI智能眼镜 【免费下载链接】OpenGlass Turn any glasses into AI-powered smart glasses 项目地址: https://gitcode.com/GitHub_Trending/op/OpenGlass 你是否曾梦想拥有自己的智能眼镜,却被数千元…...
xianyu_spider:闲鱼电商数据采集与分析解决方案
xianyu_spider:闲鱼电商数据采集与分析解决方案 【免费下载链接】xianyu_spider 闲鱼APP数据爬虫 项目地址: https://gitcode.com/gh_mirrors/xia/xianyu_spider 项目价值定位:破解电商数据采集痛点 在电商数据分析领域,数据采集面临…...
从需求到代码:基于快马平台ai生成spring boot电商系统实战项目
从需求到代码:基于快马平台AI生成Spring Boot电商系统实战项目 最近在做一个电商订单处理系统的项目,正好尝试了用InsCode(快马)平台来快速生成Spring Boot代码。整个过程比我预想的要顺畅很多,特别是对于这种包含多个模块的中型项目&#x…...
轻量级华硕笔记本控制神器G-Helper:彻底告别Armoury Crate的臃肿体验
轻量级华硕笔记本控制神器G-Helper:彻底告别Armoury Crate的臃肿体验 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, …...
QQ音乐加密文件解码终极指南:三分钟快速上手qmcdump工具教程
QQ音乐加密文件解码终极指南:三分钟快速上手qmcdump工具教程 【免费下载链接】qmcdump 一个简单的QQ音乐解码(qmcflac/qmc0/qmc3 转 flac/mp3),仅为个人学习参考用。 项目地址: https://gitcode.com/gh_mirrors/qm/qmcdump …...
【嵌入式】第2讲:USB CDC 从“插上电脑”到“出现 COM 口”,枚举过程到底发生了什么
好,进入第 2 讲。 第2讲:USB CDC 从“插上电脑”到“出现 COM 口”,枚举过程到底发生了什么 后面调试时,最常见的问题不是“代码编译不过”,而是: 插上电脑没反应设备管理器里看不到东西有未知设备&…...
千问图像生成16Bit(Qwen-Turbo-BF16)GPU利用率提升50%:BF16数值稳定性实证
千问图像生成16Bit(Qwen-Turbo-BF16)GPU利用率提升50%:BF16数值稳定性实证 基于 Qwen-Image-2512 底座与 Wuli-Art Turbo LoRA 构建的高性能、极速图像生成 Web 系统。 在AI图像生成领域,精度选择一直是性能与质量之间的关键权衡。…...
