端口扫描介绍

端口扫描可以收集目的主机的提供服务端口的信息,可以对于目的主机的信息进行收集。

端口扫描的程序每次会向目的主机特定端口发送一条请求,如果请求得到回应则可以判断是否本端口在对外开放,通过这种方法可以探知目的主机的弱点。

扫描器可以不留痕迹的进行扫描的工作,可以发现远程服务器的各种TCP端口的分配及提供的服务和它们的软件版本。

在linux中,/etc/services存储了端口号和关键字的对应关系。同时常见的端口一般不会更改服务。如:ftp(21)telnet(23)www(80)pop3(110)etc。

本程序实现了简单的端口扫描程序:可以指定目的主机的端口和需要扫描的端口的范围进行扫描,如果对应端口打开,则输出该端口,否则指示该端口不开启。

程序流程如下:

程序代码:

#include<cstdio>#include<cstdlib>#include<sys/socket.h>
#include<sys/types.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<netinet/in.h>
#include<netdb.h>
#include<cstring>#define CHKADDRESS(_saddr_)\
{\u_char *p=(u_char*)&(_saddr_);\if((p[0]==10)||(p[0]==168&&16<=p[1]&&p[1]<=31)||(p[0]==192&&p[1]==168))\;\else{\fprintf(stderr,"ip address error!\n");\exit(EXIT_FAILURE);\}\
}enum{ CMD_NAME,DST_IP,START_PORT,LAST_PORT};
enum{ CONNECT,NOCONNECT};int tcpscanport(u_int dst_ip,int dst_port);int main(int argc,char** argv)
{u_int dst_ip;  //扫描端口的主机IP地址int dst_port;  //终端端口号int start_port; //初始端口号int last_port; //结束端口号if(argc!= 4){fprintf(stderr,"usage:%s dst_ip port last_port\n",argv[CMD_NAME]);exit(EXIT_FAILURE);}    //设置执行的参数dst_ip=inet_addr(argv[DST_IP]);start_port=atoi(argv[START_PORT]);last_port=atoi(argv[LAST_PORT]);for(dst_port=start_port;dst_port<last_port;dst_port++){printf("scan port%d",dst_port);fflush(stdout);if(tcpscanport(dst_ip,dst_port)==CONNECT){struct servent *sp;sp=getservbyport(htons(dst_port)," tcp");printf("%5d %-20s\n",dst_port,(sp==NULL)?"unknown":sp->s_name);}else{printf(" noconnect\n");}}return EXIT_SUCCESS;
}/*
在指定端口建立tcp连接*/
int tcpscanport(u_int dst_ip,int dst_port)
{struct sockaddr_in dest;int s;int ret;memset((char*)&dest,0,sizeof(sockaddr_in));dest.sin_family=AF_INET;dest.sin_port=htons(dst_port);dest.sin_addr.s_addr=dst_ip;//检查地址是否合法CHKADDRESS(dest.sin_addr.s_addr);//创建tcp socketif((s=socket(AF_INET,SOCK_STREAM,0))<0){perror("socket");exit(EXIT_FAILURE);}//建立连接if(connect(s,(struct sockaddr*)&dest,sizeof(dest))<0){ret=NOCONNECT;}else{ret=CONNECT;}close(s);return ret;
}

程序运行结果

TCP/IP网络程序编程——端口扫描程序(TCP)相关推荐

  1. JAVA TCP/IP网络通讯编程(二)

    一个实例通过client端和server端通讯 客户端通过TCP/IP传输资源文件,比如图片,文字,音频,视频等..... 服务端接受到文件存入本地磁盘,返回接受到:"收到来自于" ...

  2. 【技术分享篇】从网卡到tcpip协议栈,再到应用程序丨tcp/ip网络编程丨网络api的实现原理丨sk_buff的作用

     从网卡 聊到tcp/ip协议栈,再到应用程序 1. posix tcp/ip网络编程 2. 网络api的实现原理 3. sk_buff的作用 [技术分享篇]面试中从网卡 聊到tcpip协议栈,再到应 ...

  3. 高等学校计算机科学与技术教材:tcp/ip网络编程技术基础,TCP/IP网络编程技术基础...

    TCP/IP网络编程技术基础 语音 编辑 锁定 讨论 上传视频 <TCP/IP网络编程技术基础>是2012年北京交通大学出版社出版的图书,作者是王雷. 书    名 TCP/IP网络编程技 ...

  4. TCP/IP网络编程(3)

    基于DUP的服务端与客户端 在TCP/IP网络编程(2)中,介绍了TCP/IP的四层模型,传输层分为TCP和UDP两种方式,通过TCP套接字完成数据交换已经进行了介绍,下面介绍通过UDP套接字完成数据 ...

  5. TCP/IP网络编程(1)

    1. 套接字 套接字是由操作系统提供的网络数据通信软件设备,即使对网络数据传输原理不了解,也能够使用套接字完成网络数据传输.为了与远程计算机进行数据传输,需要连接到英特网,套接字就是进行网络连接的工具 ...

  6. 从入门到入土:基于C语言采用SOCKET套接字实现TCP公开扫描程序Web服务器扫描程序|代码展示

    此博客仅用于记录个人学习进度,学识浅薄,若有错误观点欢迎评论区指出.欢迎各位前来交流.(部分材料来源网络,若有侵权,立即删除) 本人博客所有文章纯属学习之用,不涉及商业利益.不合适引用,自当删除! 若 ...

  7. TCP/IP网络编程 - 基础学习

    1. 创建Socket #include<sys/types.h> #include<sys/socket.h>int sock = ::socket(PF_INET, SOC ...

  8. TCP/IP网络编程之基于TCP的服务端/客户端(一)

    TCP/IP网络编程之基于TCP的服务端/客户端(一) 理解TCP和UDP 根据数据传输方式的不同,基于网络协议的套接字一般分为TCP套接字和UDP套接字.因为TCP套接字是面向连接的,因此又称为基于 ...

  9. 网络编程+go+java,Go语言中的TCP/IP网络编程

    Go语言TCP/IP网络编程 乍一看,通过TCP/IP层连接两个进程会感觉可怕, 但是在Go语言中可能比你想象的要简单的多. TCP/IP层发送数据的应用场景 当然很多情况下,不是大多数情况下,使用更 ...

最新文章

  1. 5 个用 Python 编写 web 爬虫的方法
  2. UGUI全面实践教程
  3. 【Android 内存优化】垃圾回收算法 ( 分代收集算法 | Serial 收集器 | ParNew 收集器 | Parallel Scavenge 收集器 | CMS 并发标记清除收集器 )
  4. 100%由清洁能源供电的数据中心什么样?苹果丹麦维堡数据中心投入使用
  5. python3安装步骤
  6. 黑马12期 day73-EasyUI笔记(2017年7月11日16:23:45)
  7. OCM备考 三. Managing Database Availability 之flashback
  8. SAP RFC user 最小权限
  9. 2020 年“我爱计算机视觉”视频号最受欢迎视频 Top10!
  10. rust全息要啥才能做_在 Rust 中不能做什么
  11. 如何重置IE浏览器?重置IE浏览器的方法
  12. An unexpected error prevented the server from fulfilling your request. (HTTP 500)
  13. 老米之家域名投资是什么?域名怎么购买?域名的购买方式?
  14. android下载安装包你火,包你火直播最新免费版 v2.5.1
  15. 玩吃鸡用什么蓝牙耳机比较好?内行推荐四款吃鸡低延迟蓝牙耳机
  16. h5活动是什么意思_h5是什么(H5和Html5是一个东西吗)
  17. 那么,我是不工作会死啦?
  18. 铂电阻温度对应阻值计算方法
  19. 计算机一级考试全部内容讲解,全国计算机等级考试一级教程讲解.doc
  20. python里import as什么意思_import as和 from import 区别

热门文章

  1. 【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体 const
  2. 数字化和管理哲学 | 中国企业为啥用不好ERP却信中台和阿米巴
  3. java中刷新js函数,js常用刷新页面方法汇总
  4. mysql 启动/停止命令
  5. mysql 启动 相关命令
  6. 中国第二届CSS开发者大会
  7. Jenkins - DingTalk
  8. 【论文导读】 - 关于联邦图神经网络的3篇文章
  9. 新书上市 | Vue 3.0 核心源码解析,这本书给Vue学习提供新方法
  10. 开启Demond Page需要的步骤(By Walle@ARMCE)