当前位置: 首页 > news >正文

大开眼界: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 上古时代如何用一个参数实现一个世界 负面典型

今天的程序员普遍遵循这样的接口设计原则&#xff1a;通过不同的接口名和参数列表准确表达不同的功能。 这似乎是理所当然的&#xff0c;然而上古时代却并非如此&#xff0c;比如Netbios协议整个协议的接口只有一个函数、一个参数&#xff01; 当初是基于什么原则这样设计不晓得…...

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文件时报错&#xff1a; ...... ModuleNotFoundError: No module named pip2、问题原因 升级pip时命令使用错误 3、问题解决 1&#xff09; 重装pip python -m ensurepip2&#x…...

python输出奇数:如何使用Python输出奇数?

Python输出奇数的方法有很多种&#xff0c;下面给出一种使用for循环的实现方式&#xff1a;上述代码的输出结果为&#xff1a; Python输出奇数的方法有很多种&#xff0c;下面给出一种使用for循环的实现方式&#xff1a; # 定义一个变量n&#xff0c;表示要输出的奇数的最大值…...

2023 NewStarCTF --- wp

文章目录 前言Week1MiscCyberChefs Secret机密图片流量&#xff01;鲨鱼&#xff01;压缩包们空白格隐秘的眼睛 Web泄露的秘密Begin of UploadErrorFlaskBegin of HTTPBegin of PHPR!C!E!EasyLogin CryptobrainfuckCaesars SecertfenceVigenrebabyrsaSmall dbabyxorbabyencodin…...

一键切换IP地址:电脑IP更改的简便方法

今天我要和大家分享一个电脑IP更改的简便方法——一键切换IP地址。如果您想要更改电脑的IP地址&#xff0c;无需繁琐的设置和复杂的步骤&#xff0c;只需使用以下简单的方法&#xff0c;即可轻松实现IP地址的切换。让我们开始吧&#xff01; 1、使用批处理脚本 批处理脚本是一…...

计算机相关内容的网站主题说明书

1. 网站名称&#xff1a; 中职计算机学堂 2. 网站目标&#xff1a; 主要目标&#xff1a;为中职学生提供计算机基础教程、编程入门、IT技能培训。次要目标&#xff1a;鼓励学生发表自己的作品&#xff0c;交流技术问题&#xff0c;构建IT爱好者社区。 3. 目标受众&#xff1…...

zabbix监控项

一、监控项&#xff08;items&#xff09; 1、获取监控数据的方式&#xff1a; ① zabbix-agent&#xff1a;代理程序是在被监控主机上运行的软件&#xff0c;负责收集和报告有关主机性能和状态的数据&#xff0c;监控系统通过与代理程序通信来获取数据。 ② SNMP&#xff1…...

Java基础面试-重载和重写的区别

重载:发生在同一个类中&#xff0c;方法名必须相同&#xff0c;参数类型不同、个数不同、顺序不同&#xff0c;方法返回值和访问修饰符可 以不同&#xff0c;发生在编译时。 重写:发生在父子类中&#xff0c;方法名、参数列表必须相同&#xff0c;返回值范围小于等于父类&…...

记一次生产大对象及GC时长优化经验

最近在做一次系统整体优化,发现系统存在GC时长过长及JVM内存溢出的问题,记录一下优化的过程 面试的时候我们都被问过如何处理生产问题&#xff0c;尤其是线上oom或者GC调优的问题更是必问&#xff0c;所以到底应该如何发现解决这些问题呢&#xff0c;用真实的场景实操&#xff…...

Vue项目为页面添加水印效果

最近在做项目&#xff0c;有这样要求&#xff0c;需要在指定容器中添加水印&#xff0c;也可不设置容器&#xff0c;如果没有容器&#xff0c;则添加在整个页面中&#xff0c;即body&#xff0c;当接到这个需求的时候我第一想的方法就是用canvas来实现&#xff0c;话不多说搞起…...

两数之和

给定一个整数数组 nums 和一个整数目标值 target&#xff0c;请你在该数组中找出 和为目标值 target 的那 两个 整数&#xff0c;并返回它们的数组下标。 你可以假设每种输入只会对应一个答案。但是&#xff0c;数组中同一个元素在答案里不能重复出现。 你可以按任意顺序返回…...

试过GPT-4V后,微软写了个166页的测评报告,业内人士:高级用户必读

一周之前&#xff0c;ChatGPT迎来重大更新&#xff0c;不管是 GPT-4 还是 GPT-3.5 模型&#xff0c;都可以基于图像进行分析和对话。与之对应的&#xff0c;多模态版GPT-4V模型相关文档也一并放出。当时 OpenAI 放出的文档只有18页&#xff0c;很多内容都无从得知&#xff0c;对…...

使用Python构造VARIMA模型

简介 VARMA(p,q)结合了VAR和VMA模型&#xff0c;其中p是向量自回归(VAR)模型的滞后期数&#xff0c;q是VMA模型的移动平均的阶数。 VARMA是ARMA的推广&#xff0c;它将ARMA模型扩展到多个时间序列变量的情况&#xff0c;通过VAR和VMA的线性组合来描述多个时间序列变量之间的联…...

Java基于SpringBoot+Vue的考研资讯平台

1 简介 大家好&#xff0c;我是程序员徐师兄&#xff0c;今天为大家带来的是Java基于SpringBootVue的考研资讯平台 Java基于SpringBoot的考研资讯平台&#xff0c;在系统当中学生可以根据不同的信息来实现该网站的考研资讯平台信息的管理。 系统主要分为前台和后台。主要包括…...

信钰证券:9月以来A股20家银行 获机构不同批次调研

Wind数据显现&#xff0c;自9月份以来&#xff0c;已经有20家银行获安排不同批次调研。其间常熟银行、瑞丰银行被调研次数较多&#xff0c;别离为20次、11次&#xff1b;宁波银行、渝农商行获安排调研家数居前&#xff0c;别离为206家、128家。从上市银行宣布的调研情况来看&am…...

应用商店优化的好处有哪些?

应用程序优化优势包括应用在商店的可见性和曝光度&#xff0c;高质量和被相关用户的更好发现&#xff0c;增加的应用下载量&#xff0c;降低用户获取成本和持续增长&#xff0c;增加应用收入和转化率以及全球受众范围。 1、提高知名度并在应用商店中脱颖而出。 如果用户找不到…...

MacOS Pro笔记本硬盘升级纪实

背景 MacPro 2015 mid的苹果本&#xff0c;忽然心血来潮想升级一下SSD。三个步骤&#xff1a;做启动盘&#xff0c;时间机器备份&#xff0c;插新的SSD盘恢复。 过程 下载MacOS&#xff0c;macOS Monterey 12.7官方原版镜像&#xff1a; https://swcdn.apple.com/content/do…...

景联文科技:3D点云标注应用场景和专业平台

3D点云技术之所以得到广泛发展和应用&#xff0c;主要是因为它能够以一种直观、真实和全面的方式来表示和获取现实世界中的三维信息。 3D点云的优势&#xff1a; 真实感和立体感&#xff1a;3D点云数据能够呈现物体的真实感和立体感&#xff0c;使观察者能够更直观地理解物体的…...

基于R语言的水文、水环境模型优化技术及快速率定方法

【阅读原文】&#xff1a;基于R语言的水文、水环境模型优化技术及快速率定方法与多模型案例实践 【内容简介】&#xff1a; 专题一、最速上升法、岭分析以及响应曲面模型 1.最速上升路径 2.信赖域 3.响应面模型 4.二阶响应面 5.岭分析 专题二、Kriging插值与优化方法 …...

学习网络安全得多少费用?网络安全入门了解

前言 网络安全是指对网络系统、硬件、软件和系统数据的保护。不因偶然或者其它原因导致破坏、更改和数据泄露情况。确保网络安全&#xff0c;防止网站被攻击、系统被病毒感染等。随着网络的快速发展&#xff0c;越来越多的用户和公司认识到网络安全的重要性&#xff0c;许多人…...

记录一次线上fullgc问题排查过程

某天&#xff0c;接到测试部门反馈说线上项目突然很快&#xff0c;由于当前版本代码和上一版本相比就多了一个刚上线了一个5分钟1次的跑批任务&#xff0c;先关闭次任务后观察是否卡顿&#xff0c;并检查堆内存是否使用完造成频繁gc 1.通过jmap命令查看堆内存中的对象 2.生成当…...

设计接口应该考虑的因素以及遵循的原则

设计接口应该考虑的因素&#xff1a; 接口的业务定位 接口的安全性 接口的可扩展性 接口的稳定性 接口的跨域性 接口的协议规则 接口的路径规则 接口单一原则 接口过滤及接口组合 1.职责原则 在设计接口时&#xff0c;必须明确接口的职责&#xff0c;即接口类型&…...

【产品】智能结构仿真软件AIFEM 2023R2新版本功能介绍

AIFEM是由天洑自主研发的一款通用的智能结构仿真软件&#xff0c;助力用户解决固体结构相关的静力学、动力学、振动、热力学等实际工程问题&#xff0c;软件提供高效的前后处理工具和高精度的有限元求解器&#xff0c;帮助用户快速、深入地评估结构的力学性能&#xff0c;加速产…...

displaty:none与visibility:hidden的区别

...

探索数据库的世界:DB、DBMS、DBA、DBS的全面介绍

目录 DB数据库(Database) DBMS数据库管理系统(Database Management System): DBA数据库管理员(Database Administrator): DBS数据库系统(Database System) 总结: DB数据库(Database) 概念&#xff1a; 存储数据的集合&#xff0c;DB可以包含各种类型的数据&#xff0c;文…...

【JVM】初步认识Java虚拟机

&#x1f40c;个人主页&#xff1a; &#x1f40c; 叶落闲庭 &#x1f4a8;我的专栏&#xff1a;&#x1f4a8; c语言 数据结构 javaEE 操作系统 Redis 石可破也&#xff0c;而不可夺坚&#xff1b;丹可磨也&#xff0c;而不可夺赤。 JVM 一、初识JVM1.1 什么是JVM1.2 JVM的功能…...

JAVA设计模式-模板模式

一.概念 定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 ​ 使用了JAVA的继承机制&#xff0c;在抽象类中定义一个模板方法&#xff0c;该方法引用了若干个抽象方法&#xff0…...

day007

删除链表第n个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int val) { this.val …...

Spring Boot项目在Windows上的自启动策略与Windows自动登录配置

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…...