TCP Socket Port Check
写了两个小程序,主要是用于linux和windows下TCP端口的检测,自带的telnet无法满足我批量检测的需要,在我眼里这类端口检测程序最为关键的是超时的限制,若端口不能却要老久才返回结果,有点不爽,在不改系统默认超时时间的前提上,引入socket的非阻塞模式达到超时限制的目的,下面是具体程序
1. windows下的tcp端口检测程序
简介:引入select模式作为超时限制
//TCP Port Check program in windows #include <stdio.h>
#include <winsock2.h> #pragma comment(lib,"ws2_32.lib") int main(int argc, char *argv[])
{
SOCKET sockfd;
SOCKADDR_IN sockaddr;
int port;
unsigned long ip;
WSADATA wsa;
int timeout=,ret;
struct timeval tv;
struct fd_set fs;
unsigned long ul = ; if(argc != )
{
printf("Usage: %s IP Port TimeOut\n",argv[]);
return -;
}
if((ip=inet_addr(argv[]))==INADDR_NONE)
{
printf("IP Address Error\n");
return -;
}
if((port=atoi(argv[]))==)
{
printf("Port Error\n");
return -;
}
if((timeout=atoi(argv[]))==)
{
printf("Timeout Error\n");
return -;
}
WSAStartup(MAKEWORD(,),&wsa); //initialize Ws2_32.dll if((sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) <= ) //create a tcp socket
{
printf("Create socket fail!\n");
return -;
}
//socket non-block mode set
if((ret = ioctlsocket(sockfd, FIONBIO, (unsigned long*)&ul))==SOCKET_ERROR)
{
closesocket(sockfd);
return -;
}
sockaddr.sin_family = AF_INET;
sockaddr.sin_port = htons(port);
sockaddr.sin_addr.S_un.S_addr = inet_addr(argv[]); //connect to target ip with port
connect(sockfd, (SOCKADDR *)&sockaddr, sizeof(sockaddr)); tv.tv_sec = timeout;
tv.tv_usec = ;
FD_ZERO(&fs);
FD_SET(sockfd,&fs);
ret = select(sockfd+,NULL,&fs,NULL,&tv);
if(ret<)
{
printf("Select Error\n");
closesocket(sockfd);
return -;
}
else if(ret == )
{
printf(" %s %d Connect fail!\n",argv[],port);
closesocket(sockfd);
return -;
}
else
{
printf(" %s %d Connected success!\n",argv[],port);
closesocket(sockfd);
}
WSACleanup(); //clean up Ws2_32.dll
return ;
}
2. Linux下TCP端口检测程序
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <netdb.h>
#include <time.h>
#include <errno.h>
int main(int argc, char *argv[])
{
int sockfd=socket(AF_INET,SOCK_STREAM,);
struct sockaddr_in client;
char ip[];
int port;
int timeout;
struct timeval tv;
if(argc != )
{
printf("Usage : %s ip port timeout\n", argv[]);
exit();
}
strcpy(ip, argv[]);
port = atoi(argv[]);
timeout = atoi(argv[]); bzero(&client, sizeof(struct sockaddr_in));
client.sin_family = AF_INET;
client.sin_addr.s_addr = inet_addr(ip);
client.sin_port = htons(port); tv.tv_sec = ;
tv.tv_usec = ; //set timeout with setsockopt
if(setsockopt(sockfd,SOL_SOCKET,SO_RCVTIMEO,(char*)&tv, sizeof(tv))<)
{
perror("setsockopt failed\n");
exit();
} if(setsockopt(sockfd,SOL_SOCKET,SO_SNDTIMEO,(char*)&tv, sizeof(tv))<)
{
perror("setsockopt failed\n");
exit();
}
if(!connect(sockfd,(struct sockaddr*)&client,sizeof(struct sockaddr_in)))
{
printf("connect ok\n"); }else{
printf("connect fail\n");
}
close(sockfd);
return ;
}
3. 总结
代码不难,关键是能提高效率,有时候简单的东西反而更好,继续努力
TCP Socket Port Check的更多相关文章
- C# 的TCP Socket (异步方式)
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...
- C# 的TCP Socket (同步方式)
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...
- C# 的tcp Socket设置自定义超时时间
简单的c# TCP通讯(TcpListener) C# 的TCP Socket (同步方式) C# 的TCP Socket (异步方式) C# 的tcp Socket设置自定义超时时间 C# TCP ...
- TCP SOCKET中backlog参数的用途是什么? ---图解
recv_queue中的包大小,为内核的包大小,而不是ip包大小. 如果发出去的包太大,需要修改write_queue和tx_queue两个参数,tx_queue主要是流量控制. 多进程必须在sock ...
- Python Tcp Socket
socket(套接字),传输层通信的端点,由IP和端口号组成(IP,Port),可以通过socket精确地找到服务器上的进程并与之通信 python2.6实现,基于AF_INET(网络套接字) 类型S ...
- 【Java TCP/IP Socket】TCP Socket通信中由read返回值造成的的死锁问题(含代码)(转)
书上示例 在第一章<基本套接字>中,作者给出了一个TCP Socket通信的例子——反馈服务器,即服务器端直接把从客户端接收到的数据原原本本地反馈回去. 书上客户端代码如下: 1 2 3 ...
- nginx、php-fpm默认配置与性能–TCP socket还是unix domain socket【转】
原文地址:https://www.cnxct.com/default-configuration-and-performance-of-nginx-phpfpm-and-tcp-socket-or-u ...
- <转>Go语言TCP Socket编程
授权转载: Tony Bai 原文连接: https://tonybai.com/2015/11/17/tcp-programming-in-golang/ Golang的主要 设计目标之一就是面向大 ...
- QT创建TCP Socket通信
最近在学习QT,了解到QT可以进行SOCKET网络通信,进行学习,并建立一个简单的聊天DEMO.为了测试是否能与VS2012下的程序进行通信,在VS2012下建立一个客户端程序,进行通信测试,发现可以 ...
随机推荐
- POJ 3107 树形dp
Godfather Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 6812 Accepted: 2390 Descrip ...
- POJ 1753 BFS
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 44450 Accepted: 19085 Descr ...
- Update SSM agent to each EC2 via Bat and bash script
1. copy the instance id from aws console to file 2. remove the , from file sed -i 's/,//g' file 3. g ...
- [洛谷P3763] [TJOI2017]DNA
洛谷题目链接:[TJOI2017]DNA 题目描述 加里敦大学的生物研究所,发现了决定人喜不喜欢吃藕的基因序列S,有这个序列的碱基序列就会表现出喜欢吃藕的性状,但是研究人员发现对碱基序列S,任意修改其 ...
- [洛谷P2051] [AHOI2009]中国象棋
洛谷题目链接:[AHOI2009]中国象棋 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法 ...
- 【转】js JavaScript 的性能优化:加载和执行
JavaScript 的性能优化:加载和执行 转自:https://www.ibm.com/developerworks/cn/web/1308_caiys_jsload/ 随着 Web2.0 技术的 ...
- 【转载】Quick-Cocos2d-x文件结构分析
在上一章我们讲过了Quick-Cocos2d-x中的环境搭建,这章我们分析下quick中的文件结构吧!打开quick的文件夹,可以看到如下的这些目录和文件: bin:存放各种与引擎相关的脚本 comp ...
- Codeforces Round #494 (Div. 3)
刚好在考完当天有一场div3,就开了个小号打了,打的途中被辅导员喊去帮忙,搞了二十分钟-_-||,最后就出了四题,题解如下:题目链接:http://codeforces.com/contest/100 ...
- js监听浏览器后退事件
$(document).ready(function(e) { var counter = 0; if (window.history && ...
- hdu 1599 find the mincost route (最小环与floyd算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1599 find the mincost route Time Limit: 1000/2000 MS ...