平时与不同业务之间联调的时候,经常得提前测试对方给的IP及端口是否开放着,Unix下用其它办法有点麻烦,索性用C语言自己写了一个程序。
#include <stdio.h>
#include <strings.h>
#include <stdlib.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/socket.h>
//#include <arpa/inet.h>
#include <netinet/in.h>
#include <errno.h>
#include <netdb.h>
#define TIMEOUT 5
/*
FileName:testConn.c
functions:test host:port which specified whether is alive.
call:testConn hostname port
return values:
0 :connected.
1:arguments err.
2:port number illegal.
3:gethostname err.
4:network setup err.
5:Connect server timeout.
*/
//Build by cc at HPUX: cc -g -Wall testConn.c -o testConn
int main(int argc, char **argv)
{
if(argc != 3)
{
printf("error:Usage: %s host port.\nExample: %s 192.168.0.1 21\n",argv[0],argv[0]);
exit(1);
}
int portnumber=0;
if ((portnumber = atoi (argv[2])) < 0)
{
fprintf (stderr, "error:port number[%s] is illegal.\n", argv[0]);
exit (2);
}
struct hostent *host;
if ((host = gethostbyname (argv[1])) == NULL)
{
fprintf (stderr, "error:Gethostname error\n");
exit (3);
}
int sockfd, flags, res;
struct sockaddr_in servaddr;
fd_set fdr, fdw;
struct timeval timeout;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if(sockfd < 0)
{
perror("error:Netwrok error...\n");
return 4;
}
/* set socket fd noblock */
if((flags = fcntl(sockfd, F_GETFL, 0)) < 0)
{
perror("error:Netwrok error...\n");
close(sockfd);
return 4;
}
if(fcntl(sockfd, F_SETFL, flags | O_NONBLOCK) < 0)
{
perror("error:Network error...\n");
close(sockfd);
return 4;
}
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
//inet_pton(AF_INET, argv[1], &servaddr.sin_addr);
servaddr.sin_addr = *((struct in_addr *) host->h_addr);
servaddr.sin_port = htons(portnumber);
if(connect(sockfd, (struct sockaddr *)&servaddr, sizeof(servaddr)) != 0)
{
if(errno != EINPROGRESS)
{ // EINPROGRESS
perror("error:Network err....\n");
close(sockfd);
return 4;
}
}
else
{
printf("Connected\n");
return 0;
}
FD_ZERO(&fdr);
FD_ZERO(&fdw);
FD_SET(sockfd, &fdr);
FD_SET(sockfd, &fdw);
timeout.tv_sec = TIMEOUT;
timeout.tv_usec = 0;
res = select(sockfd + 1, &fdr, &fdw, NULL, &timeout);
if(res < 0)
{
perror("error:Network error...\n");
close(sockfd);
return 4;
}
if(res == 0)
{
printf("error:Connect server timeout\n");
close(sockfd);
return 5;
}
if(res == 1)
{
if(FD_ISSET(sockfd, &fdw))
{
printf("Connected\n");
close(sockfd);
return 0;
}
}
/* Not necessary */
if(res == 2)
{
printf("error:Connect server timeout\n");
close(sockfd);
return 5;
}
printf("error:Connect server timeout\n");
close(sockfd);
return 5;
}
分享到:
相关推荐
在网络安全中,端口扫描常被用作渗透测试的一部分,帮助管理员发现开放的服务是否存在安全隐患。另一方面,非法的端口扫描可能被视为攻击行为,因此合法使用时需要遵守相关法律法规,尊重网络伦理。 除了上述特性,...
- **主要内容**:本书主要介绍了Unix环境下网络编程的核心技术,特别是Socket API的使用方法。 #### 二、书籍结构与目录 本书分为两大部分:介绍与TCP/IP,以及基础Socket编程。 - **第一部分:介绍与TCP/IP** - *...
在线程组下添加“HTTP请求默认值”元素,设置如服务器名称或IP、端口等基础信息,方便后续HTTP请求元素使用。 五、添加HTTP请求采样器 右键点击线程组 -> “添加” -> “Sampler” -> “HTTP Request”。在这里,...
例如,如果服务端程序正在监听 8888 端口,可以使用 `telnet localhost 8888` 来测试该端口是否开放,进而检查服务端的状态。 #### 四、TCP/UDP 协议简介 ##### 4.1 TCP (Transmission Control Protocol) TCP 是...
1. **端口扫描**:NTscan可以快速扫描指定IP地址或IP段上的TCP和UDP端口,找出哪些端口是开放的,这对于识别可能的安全漏洞至关重要。 2. **服务识别**:在找到开放端口后,NTscan会尝试识别运行在这些端口上的服务...
Nmap 可以扫描主机的端口,检测哪些端口开放、哪些端口关闭。同时,Nmap 也可以扫描端口的服务版本和协议。 7. 端口说明和扫描顺序: Nmap 提供了多种端口扫描顺序,包括顺序扫描、乱序扫描、随机扫描等。用户可以...
`telnet` 是一个远程登录协议工具,可以用来测试特定端口是否开放。例如,检查80端口是否能访问: ``` telnet www.example.com 80 ``` 9. **nc/netcat** `nc` 或 `netcat` 是一个多功能的网络工具,可用于端口...
通常情况下,端口的状态基本都是unfiltered状态,只有在大多数被扫描的端口处于filtered状态下,才会显示处于unfiltered状态的端口。 根据使用的功能选项,nmap也可以报告远程主机的下列特征:使用的操作系统、TCP...
例如,`arp -a` 列出本地ARP表,`arp -d IP地址` 可以删除指定IP的ARP条目。 八、route命令 route命令用于查看和修改主机的路由表,帮助理解数据包如何被转发到目标网络。例如,`route -n` (Linux) 或`route print`...
### 一些常用的网络DOS命令 在网络管理与故障排查过程中...- `-d <IP>`:删除指定IP地址的ARP缓存表项。 这些命令和参数在日常的网络管理和故障排查中非常实用。熟练掌握它们可以帮助网络管理员快速定位和解决问题。
例如,使用ICMP协议的Echo Request(ping)和Echo Reply(pong)来检查网络连通性,或者通过TCP的SYN/ACK标志位来测试端口开放情况。 在学习和研究网络协议时,SendIP是一个宝贵的工具。通过它,用户可以创建并发送...
端口刺探是指通过发送数据包来检查特定主机上的端口是否开放。NC提供了简单的方法来完成这项任务: - **命令格式**: ``` nc -vv ip port ``` - **示例**: ``` nc -vv 192.168.0.198 19190 RIVER [192.168.0....
- **ping6 -c (count) -s (size)**: 允许你指定发送的ICMPv6回显请求的数量和大小,以测试不同条件下的网络性能。 6. **路由和DHCPv6工具**: - **radvd**: Router Advertisement Daemon,用于自动配置IPv6客户端...
7. **telnet命令**:远程登录协议,可以测试指定主机的特定端口是否开放。在进行网络服务的调试和性能评估时,telnet是一个方便的工具。 8. **nmap命令**:网络扫描工具,可以探测网络上的主机和服务,用于网络审计...
2. **客户端**:连接到服务器,指定服务器IP、端口、报告间隔和测速时长(如20秒),可选参数`-w`用于设置TCP窗口大小(如2K),命令为`iperf3 -c 10.1.1.1 -p 1234 -i 1 -t 20 [-w 2K]`。 #### UDP测速 1. **...
- **数据发送与接收**:用户可以使用SocketTool向指定的IP地址和端口号发送自定义的数据包,并接收响应。 - **端口扫描**:可以探测目标主机开放的端口,这对于安全审计和故障排查非常有用。 - **数据包分析**:...
- `netstat -a`: 显示本地机器的所有开放端口,帮助发现潜在的安全风险。 - `netstat -r IP`: 显示指定IP地址的路由信息,有助于理解网络拓扑。 #### 四、TRACERT命令详解 **4.1 TRACERT命令简介** Tracert命令...
1. **网络发现**:NetworkScanner V3.9.190可以自动扫描指定IP地址范围内的所有在线设备,包括电脑、服务器、路由器等。它通过发送ICMP(Internet Control Message Protocol)回显请求来检测网络中的活跃设备,同时...
- **主动模式**:服务器主动发起数据连接,客户端发送PORT命令,指示服务器使用哪个端口接收数据,服务器则通过TCP 20端口连接客户端指定端口进行数据传输。 - **被动模式**:服务器被动等待数据连接,客户端发送...