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下建立一个客户端程序,进行通信测试,发现可以 ...
随机推荐
- NOIP2016Day2T3愤怒的小鸟(状压dp) O(2^n*n^2)再优化
看这范围都知道是状压吧... 题目大意就不说了嘿嘿嘿 网上流传的写法复杂度大都是O(2^n*n^2),这个复杂度虽然官方数据可以过,但是在洛谷上会TLE[百度搜出来前几个博客的代码交上去都TLE了], ...
- 【单调队列】【P1714】 切蛋糕
传送门 Description 今天是小Z的生日,同学们为他带来了一块蛋糕.这块蛋糕是一个长方体,被用不同色彩分成了N个相同的小块,每小块都有对应的幸运值. 小Z作为寿星,自然希望吃到的第一块蛋糕的幸 ...
- CentOS7搭建 Hadoop + HBase + Zookeeper集群
摘要: 本文主要介绍搭建Hadoop.HBase.Zookeeper集群环境的搭建 一.基础环境准备 1.下载安装包(均使用当前最新的稳定版本,截止至2017年05月24日) 1)jdk-8u131 ...
- switch语法的盲点
switch语法在项目使用的频率很低,今天看到一个相关的例子引发一些思考,,同时自己也写了一些简单的例子如下: 实例1: int dayOfWeek = 5; switch (dayOfWeek){ ...
- ubuntu下如何控制风扇速度?
1.安装lm-sensors (https://apps.ubuntu.com/cat/applications/lm-sensors/)和fancontrol(https://apps.ubunt ...
- HDU4625:Strongly connected(思维+强连通分量)
Strongly connected Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 使用自己的数据集训练和测试"caffenet"
主要步骤可参考: http://blog.csdn.net/u010194274/article/details/50575284 补充几点: 1. convert函数是ImageMagick包里面的 ...
- bzoj 1098 [POI2007]办公楼biu bfs+补图+双向链表
[POI2007]办公楼biu Time Limit: 20 Sec Memory Limit: 162 MBSubmit: 1543 Solved: 743[Submit][Status][Di ...
- ASP.NET创建三层架构图解详细教程
1.新建项目 2.创建Visual Studio解决方案 3.再创建项目 4.选择类库类型 5.依次创建bll(业务逻辑层),dal(数据访问层)和model(模型层也可以叫实体层) 6.添加一个网站 ...
- javascript实现正整数分数约分
//m,n为正整数的分子和分母 function reductionTo(m, n) { var arr = []; if (!isInteger(m) || !isInteger(n)) { con ...