`
pipal
  • 浏览: 166142 次
  • 性别: Icon_minigender_1
  • 来自: 南宁
社区版块
存档分类
最新评论

Unix下测试指定IP的端口是否开放

阅读更多

平时与不同业务之间联调的时候,经常得提前测试对方给的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;
}

 
0
1
分享到:
评论

相关推荐

    端口扫描程序 快速扫描 多线程、范围端口、范围IP、查看历史记录(macOS版)

    在网络安全中,端口扫描常被用作渗透测试的一部分,帮助管理员发现开放的服务是否存在安全隐患。另一方面,非法的端口扫描可能被视为攻击行为,因此合法使用时需要遵守相关法律法规,尊重网络伦理。 除了上述特性,...

    unix网络编程英文版第三版pdf

    - **主要内容**:本书主要介绍了Unix环境下网络编程的核心技术,特别是Socket API的使用方法。 #### 二、书籍结构与目录 本书分为两大部分:介绍与TCP/IP,以及基础Socket编程。 - **第一部分:介绍与TCP/IP** - *...

    使用JMeter进行性能测试

    在线程组下添加“HTTP请求默认值”元素,设置如服务器名称或IP、端口等基础信息,方便后续HTTP请求元素使用。 五、添加HTTP请求采样器 右键点击线程组 -&gt; “添加” -&gt; “Sampler” -&gt; “HTTP Request”。在这里,...

    网络编程(Unix)简要教程

    例如,如果服务端程序正在监听 8888 端口,可以使用 `telnet localhost 8888` 来测试该端口是否开放,进而检查服务端的状态。 #### 四、TCP/UDP 协议简介 ##### 4.1 TCP (Transmission Control Protocol) TCP 是...

    NTscan 扫描 工具

    1. **端口扫描**:NTscan可以快速扫描指定IP地址或IP段上的TCP和UDP端口,找出哪些端口是开放的,这对于识别可能的安全漏洞至关重要。 2. **服务识别**:在找到开放端口后,NTscan会尝试识别运行在这些端口上的服务...

    Nmap参考指南中文版.pdf

    Nmap 可以扫描主机的端口,检测哪些端口开放、哪些端口关闭。同时,Nmap 也可以扫描端口的服务版本和协议。 7. 端口说明和扫描顺序: Nmap 提供了多种端口扫描顺序,包括顺序扫描、乱序扫描、随机扫描等。用户可以...

    常用网络命令介绍实例

    `telnet` 是一个远程登录协议工具,可以用来测试特定端口是否开放。例如,检查80端口是否能访问: ``` telnet www.example.com 80 ``` 9. **nc/netcat** `nc` 或 `netcat` 是一个多功能的网络工具,可用于端口...

    网络安全实验---NMAP扫描.docx

    通常情况下,端口的状态基本都是unfiltered状态,只有在大多数被扫描的端口处于filtered状态下,才会显示处于unfiltered状态的端口。 根据使用的功能选项,nmap也可以报告远程主机的下列特征:使用的操作系统、TCP...

    网络管理员常用的网络命令集

    例如,`arp -a` 列出本地ARP表,`arp -d IP地址` 可以删除指定IP的ARP条目。 八、route命令 route命令用于查看和修改主机的路由表,帮助理解数据包如何被转发到目标网络。例如,`route -n` (Linux) 或`route print`...

    一些常用的网络DOS命令

    ### 一些常用的网络DOS命令 在网络管理与故障排查过程中...- `-d &lt;IP&gt;`:删除指定IP地址的ARP缓存表项。 这些命令和参数在日常的网络管理和故障排查中非常实用。熟练掌握它们可以帮助网络管理员快速定位和解决问题。

    发包工具SendIP

    例如,使用ICMP协议的Echo Request(ping)和Echo Reply(pong)来检查网络连通性,或者通过TCP的SYN/ACK标志位来测试端口开放情况。 在学习和研究网络协议时,SendIP是一个宝贵的工具。通过它,用户可以创建并发送...

    NC的高级用法 txt格式

    端口刺探是指通过发送数据包来检查特定主机上的端口是否开放。NC提供了简单的方法来完成这项任务: - **命令格式**: ``` nc -vv ip port ``` - **示例**: ``` nc -vv 192.168.0.198 19190 RIVER [192.168.0....

    IPv6实用工具

    - **ping6 -c (count) -s (size)**: 允许你指定发送的ICMPv6回显请求的数量和大小,以测试不同条件下的网络性能。 6. **路由和DHCPv6工具**: - **radvd**: Router Advertisement Daemon,用于自动配置IPv6客户端...

    网络命令文档

    7. **telnet命令**:远程登录协议,可以测试指定主机的特定端口是否开放。在进行网络服务的调试和性能评估时,telnet是一个方便的工具。 8. **nmap命令**:网络扫描工具,可以探测网络上的主机和服务,用于网络审计...

    iperf测速工具1

    2. **客户端**:连接到服务器,指定服务器IP、端口、报告间隔和测速时长(如20秒),可选参数`-w`用于设置TCP窗口大小(如2K),命令为`iperf3 -c 10.1.1.1 -p 1234 -i 1 -t 20 [-w 2K]`。 #### UDP测速 1. **...

    SocketTool.rar

    - **数据发送与接收**:用户可以使用SocketTool向指定的IP地址和端口号发送自定义的数据包,并接收响应。 - **端口扫描**:可以探测目标主机开放的端口,这对于安全审计和故障排查非常有用。 - **数据包分析**:...

    电脑高手必会DOC命令.doc

    - `netstat -a`: 显示本地机器的所有开放端口,帮助发现潜在的安全风险。 - `netstat -r IP`: 显示指定IP地址的路由信息,有助于理解网络拓扑。 #### 四、TRACERT命令详解 **4.1 TRACERT命令简介** Tracert命令...

    NetworkScannerV3.9.190

    1. **网络发现**:NetworkScanner V3.9.190可以自动扫描指定IP地址范围内的所有在线设备,包括电脑、服务器、路由器等。它通过发送ICMP(Internet Control Message Protocol)回显请求来检测网络中的活跃设备,同时...

    Linux服务器搭建实验报告模板

    - **主动模式**:服务器主动发起数据连接,客户端发送PORT命令,指示服务器使用哪个端口接收数据,服务器则通过TCP 20端口连接客户端指定端口进行数据传输。 - **被动模式**:服务器被动等待数据连接,客户端发送...

Global site tag (gtag.js) - Google Analytics