使用.net的api,怎样才能实现〔根据服务器的IP和服务名找到对应的端口号〕的功能?

时间:2021-04-01 18:07:15
说白了就是想实现winsock2的getservbyname的功能。

比如说,某服务器的IP是192.168.1.99,在某号端口上
开放着一个别名为ServiceAAA的TCP服务,我知道IP了,
也知道服务别名了,怎样才能取得它对应的端口号?

注意,不能使用DLLImport getservbyname以及其它的winsock2的api。

5 个解决方案

#1


非著名服务无法知道。著名的服务,例如FTP,可以进行端口扫描,但是一个机器好几万端口,很耗时间。
.Net的基础类库中没有端口扫描功能,只部分支持几个著名服务。

#2


 IPAddress serverip = IPAddress.Parse(DataOperation.FILE_SERVER_IP);
            IPEndPoint ipe = new IPEndPoint(serverip, DataOperation.FILE_SERVER_PORT);
            try
            {
                fileSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            }
            catch
            {
                return DataOperation.ERR_CREATE_SOCKET_FAILED;
            }
            try
            {
                fileSocket.Connect(ipe);
            }
            catch
            {
                return DataOperation.ERR_CONNECT_FAILED;
            }
            return 0;

#3


好像只能扫描了。

#4


引用 1 楼 jiangsheng 的回复:
非著名服务无法知道。著名的服务,例如FTP,可以进行端口扫描,但是一个机器好几万端口,很耗时间。 
.Net的基础类库中没有端口扫描功能,只部分支持几个著名服务。


嗯,确实,我早先把System.Net和System.Sockets两个namespace的api都翻了一遍,
没有找到合适的东西。扫描是不能让客户接受的,恐怕只能建议客户改变需求了。。

我只是很奇怪为什么到了.net里面反而会把这功能给舍弃了。。

#5


引用 2 楼 jummy_lin 的回复:
IPAddress serverip = IPAddress.Parse(DataOperation.FILE_SERVER_IP); 
            IPEndPoint ipe = new IPEndPoint(serverip, DataOperation.FILE_SERVER_PORT); 
            try 
            { 
                fileSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
            } 
            catch 
            { 
                return DataOperation.ERR_CREA…


很抱歉,不知道你这段代码什么意思。

#1


非著名服务无法知道。著名的服务,例如FTP,可以进行端口扫描,但是一个机器好几万端口,很耗时间。
.Net的基础类库中没有端口扫描功能,只部分支持几个著名服务。

#2


 IPAddress serverip = IPAddress.Parse(DataOperation.FILE_SERVER_IP);
            IPEndPoint ipe = new IPEndPoint(serverip, DataOperation.FILE_SERVER_PORT);
            try
            {
                fileSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            }
            catch
            {
                return DataOperation.ERR_CREATE_SOCKET_FAILED;
            }
            try
            {
                fileSocket.Connect(ipe);
            }
            catch
            {
                return DataOperation.ERR_CONNECT_FAILED;
            }
            return 0;

#3


好像只能扫描了。

#4


引用 1 楼 jiangsheng 的回复:
非著名服务无法知道。著名的服务,例如FTP,可以进行端口扫描,但是一个机器好几万端口,很耗时间。 
.Net的基础类库中没有端口扫描功能,只部分支持几个著名服务。


嗯,确实,我早先把System.Net和System.Sockets两个namespace的api都翻了一遍,
没有找到合适的东西。扫描是不能让客户接受的,恐怕只能建议客户改变需求了。。

我只是很奇怪为什么到了.net里面反而会把这功能给舍弃了。。

#5


引用 2 楼 jummy_lin 的回复:
IPAddress serverip = IPAddress.Parse(DataOperation.FILE_SERVER_IP); 
            IPEndPoint ipe = new IPEndPoint(serverip, DataOperation.FILE_SERVER_PORT); 
            try 
            { 
                fileSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
            } 
            catch 
            { 
                return DataOperation.ERR_CREA…


很抱歉,不知道你这段代码什么意思。