Cum se creează un scanner de port utilizând limbajul de programare C

Există o mulțime de scanere porturi disponibile în internet nmap este unul dintre scanerele de porturi bune dar ce dacă doriți să faceți propriul scaner port și nu știți cum să faceți acest lucru aici este codul C pentru a crea scaner port.

Ei bine, am crezut că C-Programming are cel mai rapid compilator la evaluarea performanțelor curente ale compilatoarelor în timp ce programarea python este interpretată și parțială a codului este executată folosind JIT (Just In Time Compiler) dar avem nevoie de compilator standlone pentru a finaliza operația facem acest articol.

Actualul scaner port funcționează prin încercarea de a stabili o conexiune cu fiecare port care urmează să fie scanat și asigurați-vă că portul este deschis sau închis, nu este stealth, dar poate face treaba.

Implică într-o mișcare în trei direcții între 2-gazde, prin urmare, consumă timp maxim pentru a termina treaba.

Local system ----> sends tcp syn packet -----> Remote system
Local system <---- replies with a syn+ack packet <----- Remote system
Local system ----> sends ack packet -----> Remote system

Există diferite scenarii ale scanării portului, numită „tcp syn port scanning”, care a determinat mișcarea completă a mâinilor în trei direcții.

Iată programul pentru implementarea conexiunii TCP

/*
Port scanner code in c
*/
#include „stdio.h”
#include „sys/socket.h”
#include „errno.h”
#include „netdb.h”
#include „string.h”
#include „stdlib.h”
#define MAX_INT 32767
int main(int argc , char **argv)
{
struct hostent *host;
int err, i , sock ,start , end;
char hostname[MAX_INT];
struct sockaddr_in sa;
char port
//Get the hostname to scan
printf(„Enter hostname or IP : „);
gets(hostname);

//Get start port number
printf(„\nEnter start port number : „);
//To Handle the Input
int data;
data = scanf(„%d”,&start);
if(start == EOF){
printf(„Invalid Port Number”);
exit();
}
//Get end port number
printf(„Enter end port number : „);
int data2 = scanf(„%d” , &end);
if(data2 == EOF){
printf(„Invaid Port Number”);
exit();
}
//Initialise the sockaddr_in structure
strncpy((char*)&sa , „” , sizeof sa);
sa.sin_family = AF_INET;

//direct ip address, use it
if(isdigit(hostname[0]))
{
printf(„Doing inet_addr…”);
sa.sin_addr.s_addr = inet_addr(hostname);
printf(„Done\n”);
}
//Resolve hostname to ip address
else if( (host = gethostbyname(hostname)) != 0)
{
printf(„Doing gethostbyname…”);
strncpy((char*)&sa.sin_addr , (char*)host->h_addr , sizeof sa.sin_addr);
printf(„Done\n”);
}
else
{
herror(hostname);
exit(2);
}

//Start the port scan loop
printf(„Starting the portscan loop : \n”);
for( i = start ; i <= end ; i++)
{
//Fill in the port number
sa.sin_port = htons(i);
//Create a socket of type internet
sock = socket(AF_INET , SOCK_STREAM , 0);

//Check whether socket created fine or not
if(sock < 0)
{
perror(„\nSocket”);
exit(1);
}
//Connect using that socket and sockaddr structure
err = connect(sock , (struct sockaddr*)&sa , sizeof sa);

//not connected
if( err < 0 )
{
//printf(„%s %-5d %s\r” , hostname , i, strerror(errno));
fflush(stdout);
}
//connected
else
{
printf(„%-5d open\n”, i);
}
close(sock);
}

printf(„\r”);
fflush(stdout);
return(0);
}

 

Rulați programul

Mai întâi compilați programul folosind gcc. E simplu.

# gcc portscanner.c

Acum rulați programul și furnizați intrarea necesară

# ./a.out

Introduceți numele de gazdă sau adresa IP: google.com

Introduceți numărul portului de pornire: 75
Introduceți numărul portului final: 85
Făcând gethostbyname … Terminat
Pornirea buclei portscan:
80 deschis
#
Deci, programul de mai sus a scanat porturile 75 la 85 pe google.com și a găsit doar portul 80 pentru a fi deschis, care este portul serverului web.

Faceți-vă timp pentru a comenta acest articol.

Lasa un comentariu

Acest sit folosește Akismet pentru a reduce spamul. Află cum sunt procesate datele comentariilor tale.