簡體   English   中英

如何使用套接字檢查打開的端口

[英]How to check open ports using sockets

#include<stdio.h>
#include<stdlib.h>// for exit
#include<string.h>
#include<unistd.h> //for close(),read()
#include<sys/types.h>//
#include<sys/socket.h> //for socket api's
#include<netinet/in.h>//for struct sockaddr_in
#include<arpa/inet.h>// for inet_pton

#define MAX 30

int ssfd;   //listenfd
int res; //connfd
int serverlen;
struct sockaddr_in serveraddr;

void main()
{
    int i=0,res;
    int startPortRange=0;  
    int stopPortRange=65536; 

    for(i=startPortRange; i<stopPortRange; i++)  
    {  
        ssfd=socket(AF_INET,SOCK_STREAM,0);
        if(ssfd==-1)
        {
            printf("\nSocket Creation Failed....");
        }

        serveraddr.sin_family=AF_INET;
        serveraddr.sin_addr.s_addr=inet_addr("127.0.0.1"); // inet_addr converts an IPV4 from dotted decimal string
        //to e.g(127.0.0.1) to its 32-bit network byte ordered binary value.    

        serveraddr.sin_port=i;

        serverlen=sizeof(serveraddr);

        res = bind(ssfd,(struct sockaddr*)&serveraddr,serverlen);

        if(res==-1)
        {
            printf("\nPort in Use : %d",i);
        }
        else
        {
            printf("\nPort not in use: %d",i); 
        }

        close(ssfd);
    }
}

我試圖在計算機上讀取開放端口(某些程序使用)。程序運行正常。 但它沒有給出正確的結果。例如,端口3306由我的計算機上的mysql使用,但我的程序輸出它沒有被使用。 請幫我試一試

代替

serveraddr.sin_port=i;

你需要使用

serveraddr.sin_port=htons(i);

因為inetaddr結構中的端口地址必須具有網絡字節順序

你應該綁定到0.0.0.0而不是127.0.0.1,否則你只能找到你可以綁定到17.0.0.1的端口,這不是你想要找到的。 但是,當netstat已經存在時你為什么要這樣做是一個謎。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM