2
我需要製作一個自定義端口掃描器,只掃描打開的TCP和UDP端口。我正在用套接字工作在標準C中。目前我檢索我設置的範圍內的所有端口。如何檢索所有TCP UDP打開的端口?
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <errno.h>
int scanPort(struct hostent *hostaddr,int port){
char responce[1024];
char *message="checking port";
struct sockaddr_in server_address;
int socket_d;
int rval;
socket_d = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP);
if(socket_d == -1)
{
perror("Socket()\n");
return errno;
}
memset(&server_address,0,sizeof(server_address));
server_address.sin_family=AF_INET;
server_address.sin_port=htons(port);
memcpy(&server_address.sin_addr,hostaddr->h_addr,hostaddr->h_length);
rval = connect(socket_d,(struct sockaddr *) &server_address, sizeof(server_address));
if(rval == -1)
{
close(socket_d);
return 0;
}else{
close(socket_d);
return 1;
}
}
int main(int argc, char **argv)
{
if(argc < 4){
printf("Exemplu: ./portscanner <adresa_ip> <port_pornire> <port_oprire> \n");
return (EINVAL);
}
int startPort;
int endPort;
int port;
struct hostent *host_address;
host_address = gethostbyname(argv[1]);
startPort = atoi(argv[2]);
endPort = atoi(argv[3]);
for(port = startPort;port<=endPort;port++)
{
if(scanPort(host_address,port)==1){
printf("Port %d is open\n",port);
}
}
}
在這個例子中,你可以看到我是如何解決這個問題的。但是我沒有看到只檢查TCP和UDP端口的方法。請幫我解決一下這個。
Regards, Badea Sorin!
我需要一些本地的東西。我沒有root權限,我需要運行此工具 – 2012-01-08 21:18:03
您不需要運行nmap。你只需要閱讀手冊。如果您不能安裝它,請使用我的答案中的在線手冊。 – 2012-01-08 21:20:01
哦,我明白了。但我很不高興。希望我找到這個用戶滿意 – 2012-01-08 21:25:54