C++ TCP端口扫描
差不多就是这样的吧
#include stdio.h
#include winsock.h
#pragma comment(lib,"wsock32.lib")
int main(int argc, char **argv)
{
SOCKET sd_client;
u_short iPortStart, iPortEnd, port;
struct sockaddr_in addr_srv;
char *pszHost;
WSADATA wsaData;
WORD wVersionRequested;
int err;
switch(argc)
{
case 2:
iPortStart = 0;
iPortEnd = 65535;
pszHost =argv[1];
break;
case 3:
iPortStart = iPortEnd = atoi(argv[2]);
pszHost =argv[1];
break;
case 4:
iPortStart = atoi(argv[2]);
iPortEnd = atoi(argv[3]);
pszHost =argv[1];
break;
default:
printf("正确的命令行参数:\n");
printf("[IP] 扫描所有端口\n");
printf("[IP] [端口]:扫描单个端口\n");
printf("[IP] [端口1] [端口2]:扫描端口1到端口2\n");
return 1;
}
wVersionRequested = MAKEWORD( 1, 1 );
err = WSAStartup( wVersionRequested, wsaData );
if ( err != 0 )
{
printf("Error %d: Winsock not available\n", err);
return 1;
}
for(port=iPortStart; port=iPortEnd; port++)
{
sd_client = socket(PF_INET, SOCK_STREAM, 0);
if (sd_client == INVALID_SOCKET)
{
printf("no more socket resources\n");
return 1;
}
addr_srv.sin_family = PF_INET;
addr_srv.sin_addr.s_addr=inet_addr(pszHost);
addr_srv.sin_port = htons(port);
err = connect(sd_client, (struct sockaddr *) addr_srv, sizeof(addr_srv));
if (err == INVALID_SOCKET)
{
printf("不能连接此端口:%d\n", port);
closesocket(sd_client);
continue;
}
printf("扫描此端口成功:%d\n", port);
closesocket(sd_client);
}
WSACleanup();
return 0;
}
如何用C++编写简易端口扫描器(要详细步骤)
#includewinsock2.h
#includestdio.h
#include time.h//计时需要用到的头文件
#pragma comment(lib,"ws2_32.lib")
#include time.h//计时需要用到的头文件
clock_t start,end;//程序运行的起始和结束时间
float costtime;//程序耗时
void usage(void)
{
printf("\tusage: tcpscan RemoteIP StartPort-EndPort\n");
printf("\tExample: tcpscan 192.168.1.1 80-100\n");
}
int main(int argc,char **argv)
{
char *host;
int startport,endport;
char *p;
if(argc!=3)
{
usage();
return 0;
}
p=argv[2];//处理端口参数
if(strstr(argv[2],"-"))
{ startport=atoi(argv[2]);
for(;*p;)
if(*(p++)=='-')break;
endport=atoi(p);
if(startport1 || endport65535)
{ printf("Port Error!\n");
return 0;
}
}
host=argv[1];
WSADATA ws;
SOCKET s;
struct sockaddr_in addr;
int result;
long lresult;
lresult=WSAStartup(MAKEWORD(1,1), ws);
addr.sin_family =AF_INET;
addr.sin_addr.s_addr =inet_addr(host);
start=clock();//开始计时
for (int i=startport;iendport;i++)
{
s=socket(AF_INET, SOCK_STREAM, 0);
addr.sin_port = htons(i);
if(s==INVALID_SOCKET)break;
result=connect(s, (struct sockaddr*)addr,sizeof(addr));
if(result==0)
{
printf("%s %d\n",host,i);
closesocket(s);
}
}
end=clock();//计时结束
costtime= (float)(end - start) / CLOCKS_PER_SEC; //转换时间格式
printf("Cost time:%f second",costtime);//显示耗时
WSACleanup();
}
信息探测之SuperScan端口扫描实验
uperScan具有以下功能:
1.通过Ping来检验IP是否在线;
2.IP和域名相互转换;
3.检验目标计算机提供的服务类别;
4.检验一定范围目标计算机的是否在线和端口情况;
5.工具自定义列表检验目标计算机是否在线和端口情况;
6.自定义要检验的端口,并可以保存为端口列表文件;
7.软件自带一个木马端口列表trojans.lst,通过这个列表我们可以检测目标计算机是否有木马;同时,我们也可以自己定义修改这个木马端口列表
进入
换至“Scan”选项卡,点击左下的开始按钮开始进行第一次扫描。 扫描结果如图6。
第一次扫描完毕之后,点击“View Html Results”查看扫描报告
再次切换至“Host and Service Discovery”选项卡,同样仅选中“TCP Port Scan”复选框,但将“Scan Type”设置为“SYN”
同上,扫出
再次切换至“Host and Service Discovery”选项卡,仅选中“UDP Port Scan”
进行第三次扫描
100分求linux下C语言端口扫描代码
linux tcp udp 端口扫描源程序
#include sys/socket.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h
#include errno.h
#include netdb.h
#include stdio.h
#include string.h
#include netinet/ip_icmp.h
#include stdlib.h
#include signal.h
#include libxml/parser.h
#include libxml/tree.h
#define TRUE 1
#define FALSE 0
#define UDP "UDP"
#define TCP "TCP"
#define tcp "tcp"
#define udp "udp"
typedef struct _GsSockStru{
int fd;
int len;
struct sockaddr_in addr;
}GsSockStru;
static int tcptest( char ip[32], char port[20]);
static int udptest( char ip[32], char port[20]);
void sig_alrm( int signo );
static GsSockStru test_sock;
int
main( int argc, char** argv)
{
char string[64];
char port[20];
char pro[20];
char ip[32];
int res;
int i = 0;
int k = 0;
if( argc2 || argc2 )
{
printf("鍙傛暟涓嶆纭?-1\n");
return ( -1 );
}
strcpy( string, argv[1]);
while( *string )
{
if( string[i] == ':' )
break;
pro[k] = string[i];
k++;
i++;
}
pro[k] = '\0';
i++;
k = 0;
while( *string )
{
if( string[i] == ':')
break;
ip[k] = string[i];
k++;
i++;
}
ip[k] = '\0';
i++;
k=0;
while( *string )
{
if( string[i] == '\0')
break;
port[k] = string[i];
k++;
i++;
}
port[k] = '\0';
i++;
memset( test_sock, 0, sizeof( test_sock ) );
if ( ( strcmp( TCP, pro) != 0 ) ( strcmp( UDP, pro) != 0 ) ( strcmp( tcp, pro) != 0 ) ( strcmp( udp, pro) != 0 ))
{
printf ( "鍙傛暟涓嶆纭?锛?\n" );
return (-1);
}
if ( strcmp( TCP, pro) == 0 || strcmp( tcp, pro) == 0 )
res = tcptest( ip, port );
if ( strcmp( UDP, pro) == 0 || strcmp( udp, pro) == 0 )
res = udptest( ip, port );printf("%d\n",res);
return ( res );
}
int
tcptest( char ip[32], char port[20])
{
int res;
struct timeval tv;
test_sock.fd = socket( AF_INET, SOCK_STREAM, 0 );
if ( test_sock.fd 0 )
{
printf( "create socket failed -3 \n" );
return ( -3 );
}
memset( ( test_sock.addr ), 0, sizeof( test_sock.addr ) );
test_sock.addr.sin_family = AF_INET;
test_sock.addr.sin_port = htons( atoi( port ) );
inet_pton( AF_INET, ip, test_sock.addr.sin_addr );
test_sock.len = sizeof( struct sockaddr );
tv.tv_sec = 10;
tv.tv_usec = 0;
setsockopt( test_sock.fd, SOL_SOCKET, SO_RCVTIMEO,
(const char *)tv, sizeof( tv ) );
res = connect( test_sock.fd,
( struct sockaddr * )( ( test_sock.addr ) ),
test_sock.len );
if ( res 0 )
{
fprintf( stderr, "connect failed 0\n" );
close( test_sock.fd );
return FALSE;
}
close( test_sock.fd );
return TRUE;
}
int udptest( char ip[32], char port[20])
{
struct icmphdr *icmp_header;
struct sockaddr_in target_info;
int target_info_len;
fd_set read_fd;
int scan_port;
char recvbuf[5000];
struct sockaddr_in target_addr;
int icmp_socket;
int udp_socket;
struct timeval tv;
icmp_header = (struct icmphdr *)(recvbuf+sizeof(struct iphdr));
scan_port = atoi( port );
target_addr.sin_family = AF_INET;
inet_pton( AF_INET, ip, target_addr.sin_addr );
target_addr.sin_port = htons(scan_port);
if ((udp_socket=socket(AF_INET,SOCK_DGRAM,0))==-1)
{
printf("create socket failed -3\n");
return -3;
}
if ((icmp_socket=socket(AF_INET,SOCK_RAW,IPPROTO_ICMP))==-1)
{
printf("Create raw socket failed -3\n");
return -3;
}
sendto(udp_socket,NULL,0,0,(void *)target_addr,sizeof(target_addr));
FD_ZERO(read_fd);
FD_SET(icmp_socket,read_fd);
tv.tv_sec = 1;
tv.tv_usec = 0;
select(FD_SETSIZE,read_fd,NULL,NULL,tv);
for (;;){
if (FD_ISSET(icmp_socket,read_fd))
{
target_info_len = sizeof(target_info);
recvfrom(icmp_socket,recvbuf,5000,0,
(struct sockaddr *)target_info,target_info_len);
if (target_info.sin_addr.s_addr == target_addr.sin_addr.s_addr
icmp_header-type == 3 icmp_header-code=12)
{
printf("Port %d : Close\n",scan_port);
return (0);
}
}
return (1) ;
}
}
0条大神的评论