社区
网络通信/分布式开发
帖子详情
吐血求用程序获得子网掩码的方法!!!给与帮助者必定中谢。
shuihe
2003-12-26 10:55:10
本人由于工作关系,要写获得子网掩码的程序!有那位大哥知道吗?提供有用帮助者必重谢。
...全文
141
4
打赏
收藏
吐血求用程序获得子网掩码的方法!!!给与帮助者必定中谢。
本人由于工作关系,要写获得子网掩码的程序!有那位大哥知道吗?提供有用帮助者必重谢。
复制链接
扫一扫
分享
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
jyh149129
2003-12-26
打赏
举报
回复
给你一个从网络找的程序:
获取IP地址以及全部TCPIP连接的掩码
我们有很多种方法获取一台计算机的IP地址,但这里才是“正确”的方法:列出所有的地址、网络掩码、广播地址和连接状态等,包括环回点 127.0.0.1。需要使用到WinSock2。
这是一个完整的Delphi单元,将它加入到你的工程中,你可以调用:
EnumInterfaces(var s string): Boolean;
来返回所有IP地址、网络掩码、广播地址和连接状态。
--------------------------------------------------------------------
unit USock;
interface
uses Windows, Winsock;
{
此函数列举出所有的TCP/IP连接,并返回一个由回车换行(CRLF)符分隔的字符串,包含以下信息:
IP, NetMask, BroadCast-Address, Up/Down status,
Broadcast support, Loopback
如果你将这个字符串赋给TMemo(它的Memo.Lines.Text属性),你可以看到更清晰的结果。
使用此函数,你需要Win98/ME/2K, 95 OSR 2 或者NT service pack #3,因为程序会使用到WinSock 2(WS2_32.DLL)。
}
function EnumInterfaces(var sInt: string): Boolean;
{ 从Winsock 2.0导入函数WSAIOCtl -- 在Win98/ME/2K and 95 OSR2, NT srv pack #3下才有Winsock 2 }
function WSAIoctl(s: TSocket; cmd: DWORD; lpInBuffer: PCHAR; dwInBufferLen:
DWORD;
lpOutBuffer: PCHAR; dwOutBufferLen: DWORD;
lpdwOutBytesReturned: LPDWORD;
lpOverLapped: POINTER;
lpOverLappedRoutine: POINTER): Integer; stdcall; external 'WS2_32.DLL';
{ Constants taken from C header files }
const SIO_GET_INTERFACE_LIST = $4004747F;
IFF_UP = $00000001;
IFF_BROADCAST = $00000002;
IFF_LOOPBACK = $00000004;
IFF_POINTTOPOINT = $00000008;
IFF_MULTICAST = $00000010;
type sockaddr_gen = packed record
AddressIn: sockaddr_in;
filler: packed array[0..7] of char;
end;
type INTERFACE_INFO = packed record
iiFlags: u_long; // Interface flags
iiAddress: sockaddr_gen; // Interface address
iiBroadcastAddress: sockaddr_gen; // Broadcast address
iiNetmask: sockaddr_gen; // Network mask
end;
implementation
{-------------------------------------------------------------------
1. 打开Winsock
2. 创建一个socket
3. 调用WSAIOCtl获取网络连接
4. 对每个连接,获取它的IP、掩码、广播地址、状态
5. 将信息填充到一个由CDLF分隔的字符串中
6. 结束
--------------------------------------------------------------------}
function EnumInterfaces(var sInt: string): Boolean;
var s: TSocket;
wsaD: WSADATA;
NumInterfaces: Integer;
BytesReturned, SetFlags: u_long;
pAddrInet: SOCKADDR_IN;
pAddrString: PCHAR;
PtrA: pointer;
Buffer: array[0..20] of INTERFACE_INFO;
i: Integer;
begin
result := true; // Initialize
sInt := '';
WSAStartup($0101, wsaD); // Start WinSock
// You should normally check
// for errors here :)
s := Socket(AF_INET, SOCK_STREAM, 0); // Open a socket
if (s = INVALID_SOCKET) then exit;
try // Call WSAIoCtl
PtrA := @bytesReturned;
if (WSAIoCtl(s, SIO_GET_INTERFACE_LIST, nil, 0, @Buffer, 1024, PtrA, nil,
nil)
<> SOCKET_ERROR)
then
begin // If ok, find out how
// many interfaces exist
NumInterfaces := BytesReturned div SizeOf(INTERFACE_INFO);
for i := 0 to NumInterfaces - 1 do // For every interface
begin
pAddrInet := Buffer[i].iiAddress.addressIn; // IP ADDRESS
pAddrString := inet_ntoa(pAddrInet.sin_addr);
sInt := sInt + ' IP=' + pAddrString + ',';
pAddrInet := Buffer[i].iiNetMask.addressIn; // SUBNET MASK
pAddrString := inet_ntoa(pAddrInet.sin_addr);
sInt := sInt + ' Mask=' + pAddrString + ',';
pAddrInet := Buffer[i].iiBroadCastAddress.addressIn; // Broadcast addr
pAddrString := inet_ntoa(pAddrInet.sin_addr);
sInt := sInt + ' Broadcast=' + pAddrString + ',';
SetFlags := Buffer[i].iiFlags;
if (SetFlags and IFF_UP) = IFF_UP then
sInt := sInt + ' Interface UP,' // Interface up/down
else
sInt := sInt + ' Interface DOWN,';
if (SetFlags and IFF_BROADCAST) = IFF_BROADCAST then // Broadcasts
sInt := sInt + ' Broadcasts supported,' // supported or
else // not supported
sInt := sInt + ' Broadcasts NOT supported,';
if (SetFlags and IFF_LOOPBACK) = IFF_LOOPBACK then // Loopback or
sInt := sInt + ' Loopback interface'
else
sInt := sInt + ' Network interface'; // normal
sInt := sInt + #13#10; // CRLF between
// each interface
end;
end;
except
end;
//
// Close sockets
//
CloseSocket(s);
WSACleanUp;
result := false;
end;
end.
mxk19791116
2003-12-26
打赏
举报
回复
up
coffeesun
2003-12-26
打赏
举报
回复
当前机器的设置可以从注册表
HKEY_LOCAL_MACHINE\System\CurrentControlSet\
Services\Class\NetTrans\中得到。
搜索从0001到000a,如果
DriverDesc =TCP/IP,则IPMask就是当前掩码
在delphi中读取键值
shuihe
2003-12-26
打赏
举报
回复
谢谢
up
计算机网络基础,
吐血
整理中!
文章目录Computer network网络体系IP地址(TODO)
子网掩码
及网络划分(TODO)ARP/RARP协议路由选择协议TCP/IP(TODO)UDPNAT协议DHCP协议HTTP(TODO)RESTful(Representational State Transfer)举例 Computer network 网络体系 OSI体系结构:概念清楚 & 理念完整,但复杂 & 不实用 TCP / IP体系结构:含了一系列构成互联网基础的网络协议,是Internet的核心协议 &
如何在Android-Studio下进行NDK开发,
吐血
整理
开头 我准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事情,谈不拢的话,就年后直接找其他的公司。 谁想到婚假还没休完,老板就在公司宣布了撤出上海的决定,愿意去深圳的就去,不愿意的就自己找工作,给了一个多月的时间找工作,就没有赔偿了,反正公司也没钱。真的悲哀… 幸好提前准备过,不过都是断断续续的今天看点这个,明天看点那个,三天打鱼两天晒网的,也没用心去准备.这下好了,直接到了最差的地步了,没办法,用心准备吧 字节音视频一面凉经 时间:花了70分钟左右 面试过程: 一开始问我的是一
服务器配置
吐血
总结
服务器配置
吐血
总结 系统——Ubuntu16.04【非Server版本】 1.准备好一个空的U盘,将镜像激活系统文件拷贝好以备用, 2.开启服务器主机,用PrintScreen键切换主机屏幕,按Enter键便可以进入原始系统界面,如果过程中有任何卡顿,可以选择按Ctrl+Alt+Del进行重启。 机柜编号 一组是一个User,从上至下是一个Server,因此编号为’U1S1,U1S2,U1S3…...
程序
员必学!如何在Android-Studio下进行NDK开发,
吐血
整理
开头 我准备面试其实已经准备了挺久了,当时打算面试准备了差不多以后,跟公司谈谈涨薪的事情,谈不拢的话,就年后直接找其他的公司。 谁想到婚假还没休完,老板就在公司宣布了撤出上海的决定,愿意去深圳的就去,不愿意的就自己找工作,给了一个多月的时间找工作,就没有赔偿了,反正公司也没钱。真的悲哀… 幸好提前准备过,不过都是断断续续的今天看点这个,明天看点那个,三天打鱼两天晒网的,也没用心去准备.这下好了,直接到了最差的地步了,没办法,用心准备吧 字节音视频一面凉经 时间:花了70分钟左右 面试过程: 一开始问我的是一
网络工程师大佬
吐血
整理!30个网工必学的基础知识点,收藏这篇就够了
计算机网络是指通过通信链路连接起来的多台计算机,使它们可以相互之间进行数据交换和资源共享的系统。简单地说,计算机网络就是将多台计算机连接起来,使它们可以相互通信和协作。骨干网是用来连接多个区域或地区的高速网络。每个骨干网中至少有一个和其他骨干网进行互联互通的连接点。不同的网络供应商都拥有自己的骨干网,用以连接其位于不同区域的网络。LAN是局域网的缩写。局域网就是局部地区形成的一个区域网络,其特点就是分布地区范围有限,可大可小,大到一栋建筑楼 与相邻建筑之间的连接,小到可以是办公室之间的联系。
网络通信/分布式开发
1,594
社区成员
32,944
社区内容
发帖
与我相关
我的任务
网络通信/分布式开发
Delphi 网络通信/分布式开发
复制链接
扫一扫
分享
社区描述
Delphi 网络通信/分布式开发
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章