当前位置:  技术问答>linux和unix

LINUX下TCP SYN(半连接)的扫描程序如何实现?请给出源码!100期待

    来源: 互联网  发布时间:2014-11-22

    本文导语:  TCP SYN(半连接)的扫描程序如何实现?请给出源码! 关于工作原理,我已明白,希望给出源码,C语言版。 | 在Linux 上编译通过  /*   *编译是这样的   *gcc -o synscan synscan.c -lpthread   *by...

TCP SYN(半连接)的扫描程序如何实现?请给出源码!
关于工作原理,我已明白,希望给出源码,C语言版。

|
在Linux 上编译通过

 /*
  *编译是这样的
  *gcc -o synscan synscan.c -lpthread
  *by sztcww
  */
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include  
#include 

#define SEQ 12345 
#define TCPSIZE sizeof(struct tcphdr) 
int sendSyn(int sockfd,u_long sourceIP,u_short sourcePort,u_long seqNum,struct sockaddr_in * dst); 
void * recv_packet(void * arg); 
struct sockaddr_in dest; 
int fd;
struct tcphdr * tcp; 
u_short sourcePort=1234; 
struct servent * sptr; 
int startip,hostsums,port; 
unsigned short in_cksum(unsigned short * addr,int len)
{/*计算较验和的*/
  int nleft=len;
  int sum=0;
  unsigned short * w=addr;
  unsigned short answer=0;
 
  while (nleft>1)
  {
    sum+=*w++;
    nleft-=2;
  }

  if (nleft==1)
  {
    *(unsigned char *)(&answer)=*(unsigned char *)w;
    sum+=answer;
  }

  sum=(sum>>16)+(sum & 0xffff);
  sum+=(sum>>16);
  answer=~sum;
  return(answer);
}
void Alarm(int sig)
{
    kill(0,SIGHUP);
}

int main(int argc,char **argv) 

  int j; 
  struct hostent * phe; 
  pthread_t tid; 
  struct ifreq if_data;
  u_long addr_p; 
  char * addr;
  if  (argc!=4)
    printf("Usage: %s    n",argv[0]),exit(1); 

 port=atoi(argv[1]);
 hostsums=atoi(argv[3]); 
  
if ((fd=socket(AF_INET,SOCK_RAW,IPPROTO_TCP))h_length); 
  else if (inet_aton(argv[2],&dest.sin_addr)ack && tcp->syn) 
    {/*这些已经没有什么了,就是系统调用*/
        in1=(struct sockaddr_in *)&from;;
        srcaddr=inet_ntoa(in1->sin_addr);
printf("SERVER: %s ",srcaddr);
        if ((sptr=getservbyport(tcp->source,"tcp"))!=NULL) 
{         printf("[32mPort:%5d   [31mServer: %s[37mn",ntohs(tcp->source),sptr->s_name); 
}
else 
          printf("[32mPort:%5d [37mn",ntohs(tcp->source));
       fflush(stdout); 
       all++;
       continue; 
    } 
  }/* end for */ 

int sendSyn(int sendSocket,u_long sourceIP,u_short sourcePort,u_long seq,struct sockaddr_in * dst) 

  unsigned char netPacket[TCPSIZE]; 
  struct  tcphdr * tcp; 
  u_char * pPseudoHead; 
  u_char pseudoHead[12+sizeof(struct tcphdr)];
  u_short  tcpHeadLen; 
  memset(netPacket,0,TCPSIZE); 
  tcpHeadLen=htons(sizeof(struct tcphdr)); 
  tcp=(struct tcphdr *)netPacket; 
  tcp->source=htons(sourcePort); 
  tcp->dest=dst->sin_port; 
  tcp->seq=htonl(seq); 
  tcp->ack_seq=0; 
  tcp->doff=5; 
  tcp->syn=1; /*Syn的标志*/
  tcp->window=htons(10052); 
  tcp->check=0; 
  tcp->urg_ptr=0; 
  pPseudoHead=pseudoHead; 
  memset(pPseudoHead,0,12+sizeof(struct tcphdr)); 
  memcpy(pPseudoHead,&sourceIP,4);
  pPseudoHead+=4;
  memcpy(pPseudoHead,&dest.sin_addr,4);
  pPseudoHead+=5;
  memset(pPseudoHead,6,1); 
  pPseudoHead++; 
  memcpy(pPseudoHead,&tcpHeadLen,2); 
  pPseudoHead+=2; 
  memcpy(pPseudoHead,tcp,sizeof(struct tcphdr));
  tcp->check=in_cksum((u_short *)pseudoHead,sizeof(struct tcphdr)+12);
  return (sendto(sendSocket,netPacket,TCPSIZE,0,(struct sockaddr*)dst,sizeof(struct sockaddr_in))); 


|
我想起来了。以前有一本书叫《黑客就这么几招》里讲了SYN扫描的基本原理。还带了一个小的程序。你可以找来看看。我的那本丢了。

    
 
 

您可能感兴趣的文章:

  • linux使用shell脚本,如何创建用户,并设置用户密码?能否给出示例?
  • 请给出linux 学习书籍以及循序渐进的看书顺序
  • 求LINUX的远程登陆软件,直接进入界面的那种,请给出地址,感激!!
  • 请给出你关于linux&windows98联网的建议,谢谢.
  • 新手急求答案:在linux中当open()时给出提示command not find
  • redhat linux 9 与WNI xp共存一硬盘,显卡为 ATI RADEON 9600 可linux给出的驱动却是Vesa 的,我从驱动列表里选择了ATI RADEON 9600可是
  • 哪位大哥,能否给出在linux下sendmail配置图呀
  • j2re-1_4_2_04-linux-i586.bin该怎么安装啊?(请给出具体步骤)
  • linux新手的诸多疑问,向高手求助了!(给出我能给的最高分数!)
  • 十万火急!!!如能给出满意答案,高分相送!!!!!!!!重装XP后,linux启动一半后停止啦!!!!!!!!!!!
  • linux/centos源码安装nginx编译配置选项参数介绍
  • 大家好,我有从网上下的BT源码和MPLAYER源码(是LINUX源码安装的)我想分析一下这些源码。可是这些源码有工作区么?
  • linux/centos下安装nginx(rpm安装和源码安装)详细步骤
  • 请问,shell的一些命令的源码在linux源码树中的那部分?
  • 搜索引擎蜘蛛源码,谁能帮我编译一下!!!源码相赠(没办法,我了解Linux!!!)
  • 都说Linux是开源的,在哪可以找到Linux的源码?
  • 书写基于Linux内核的键盘记录器(Writing Linux Kernel Keylogger)中的源码如何编译通过???
  • linux下命令应用软件的源码放在那里?
  • 关于Linux中的QoS部分源码分析
  • 求Linux下mplay(或其它播放器)源码
  • 如何学习linux命令源码
  • 哪本linux源码分析的书里详细讲解了Linux的核心启动代码
  • 咨询一下linux 源码的发布方式
  • 有没有玩的转LINUX源码的高手?
  • Linux字符模式下,有没有支持源码关键字的软件?
  • 请教:如何阅读linux下的源码
  • 可有人对linux的dhcp的源码分析过么?望各位指教,
  • Linux Device Driver 源码请教
  • linux命令源码阅读--求指点
  • 急求Linux下的rtsp服务器的源码?
  • Linux0.11 内核源码 main函数的参数问题
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在linux下怎样扫描硬盘
  • 在linux操作系统中如何对打印机,扫描仪使用的次数进行审计
  • linux下的网络扫描器用什么层次的技术实现?
  • 请问LINUX下用什么方法扫描键盘
  • 在linux操作系统如何判断传真机,扫描仪,打印机是否当前连接??
  • linux的apache服务器的默认网页路径在扫描地方?急用!
  • linux 下使用USB条码扫描枪的错误,请帮我看一下
  • centos linux5.4下如何拒绝扫描攻击
  • 求LINUX下的端口扫描程序
  • 我在linux下写了个简单的多线程端口扫描程序,运行时出现问题,请教一下!
  • 求助改正/用c在LINUX下写的端口扫描程序有错误 /希望能在6.10前解决
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux c下利用srand和rand函数生成随机字符串
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux c++虚函数(virtual function)简单用法示例代码
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3