Code:
#include <errno.h>
#include <stdio.h>
#include <netdb.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/ip.h>
#include <netinet/in.h>
#include <netinet/ip_icmp.h>
#include <stdlib.h>
#include <inttypes.h>
#include <string.h>
#define MAXSIZE 0
#define resend 10
#define udppac ('4030')
#define synst sizeof(struct iphdr)
void main(int argc, char **argv[]){
if(argc<2){
fprintf(stderr, "error, no port") ;
exit (1);
}
int scan();
}
int scan(){
unsigned char buffe[udppac];
char udppac=(char*)malloc(synst);
struct timeval timesec;
int sockfd;
int ipleng;
int re;
int port= 1020;
struct hostent *host;
struct sockaddr my_addre;
struct imcphdr *IC;
struct sockaddr_in *my_addr;
struct ip *ipp;
struct iw_range *rang;
struct iwreq *iwq;
struct addrinfo adin, **adinfo, ***t;
char *message;
static char h_addr_list[0];
static char addrlist[0];
char r;
struct FD_SET readfds;
errno=0;
int SIOCSIWSCAN();
int ioctl();
void iw_get_range_info();
int io;
io=ioctl(socket,SIOCSIWSCAN, &iwq);
extern int wlan0;
struct iw_range *rang;
struct iwreq *iwq;
iw_get_range_info(socket,"wlan0",&rang);
if(r=iw_get_range_info(sockfd, "wlan0", &rang)>0){
rang+1;
exit(1);
}
struct servent serve;
//char serve [50];
int hlen;
int slen;
int portcounter;
int haddrinfo;
for(int i=0, portcounter=0; port<r; i++,portcounter++ ){
int hostt;
struct hostent host;
*if(hostt=getnameinfo((struct sockaddr)&my_addre, MAXSIZE, &host, hlen, serve, slen, NULL)==NULL){
memset(&adin,0,sizeof(adin));
adin.ai_family=AF_UNSPEC;
adin.ai_sock_type=SOCK_DGRAM;
adin.ai_protocol=0;
adin.ai_cannonname=INADDR_ANY;
if(haddrinfo=getaddrinfo(NULL, 1020, &host, &adin, &adinfo)!=0){
fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(haddrinfo));
exit(1);
}
for(t = adinfo; t != NULL; t = t->ai_next) {
if ((sockfd = socket(t->ai_family, t->ai_socktype,
t->ai_protocol)) == -1) {
perror("socket fail");
}
if (bind(sockfd, t->ai_addr, t->ai_addrlen) == -1) {
close(sockfd);
perror("bind failed");
continue;
}
else
printf("IP address");
float addrlist[0];
//addrlist=h_addr_list;
for(i=0; portcounter>0; i++){
int i;
int port;
port=i;
printf("host: %d\n", portcounter);//double check
printf("server: %d \n", haddrinfo);
void bzero();
struct sockaddr_in *my_addr;
bzero((char*)&my_addr, sizeof(my_addr));
atoi(argv);
port=atoi(argv[1]);
memset(&my_addr,0,sizeof(my_addr));
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(1020);
my_addr.sin_addr.s_addr=INADDR_ANY;
//my_addr.sin_addr(struct in_addr*)&host;
sockfd=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
if(sockfd<0){
perror("socket not created");
return -1;
}
int rsock;
if((rsock=socket(AF_INET, SOCK_RAW, IPPROTO_ICMP))<0)) {
perror(" socket fail [%s]\n");
exit(-1);
}
memset (&ipp,0x0,sizeof(struct iphdr));
my_addr.sin_family=AF_INET;
my_addr.sin_port=1020;
my_addr.s_addr=INADDR_ANY;
re=0;
while(re++ < resend){
if((sendto(sockfd,MAXSIZE,sizeof(MAXSIZE),0x0,(struct sockaddr*)&my_addre,sizeof(my_addre))<0)){
perror("[ERROR] can't send");
exit(-1);
}
if(setsockopt(sockfd,SOL_SOCKET,SO_BROADCAST,&host,sizeof(host))<0){
perror("setsockopt(SOL_BROADCAST)");
exit(0);
}
timesec.tv_sec=3;
FD_SET *readfds;
FD_ISSET(rsock,&my_addr);
FD_ZERO(&readfds);
FD_SET(rsock,&readfds);
ipleng=ipp.ip_hl<<2;
for(;;){
if((select(rsock+1,NULL,&readfds,NULL,×ec))>0){
if((FD_ISSET(rsock,&readfds))!=0){
siz=read(rsock,(struct icmphdr*)&IC,sizeof(IC));
if(siz=0){
printf("can't read");
if(recvfrom(rsock,buffe,sizeof(buffe),0,&my_addre,NULL)<0){
perror("[ERROR] UDP:");
exit(-1);
}
ipp=(struct ip*)buffe;
ipleng=ipp->ip_hl <<2;
message=(struct icmp*)(buffe+ipleng);
if(message->type==ICMP_UNREACH)&&message->code==ICMP_UNREACH_PORT{
exit(1);
}
else{
if(message==0){
printf("port open");
port=getservbyport(htons(addrlist[i]), "port");
printf("udp port %d %s is open\n", addrlist[i], port->s_addr);
if(port==NULL){
printf("unknown");
}
fflush(stdout);
}
}
}
}
}
}
}
}
}
}
}
}
close(sockfd);
return 0;
}