亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcp_scan.c

?? TCP/IP商品掃描器 0.1
?? C
?? 第 1 頁 / 共 2 頁
字號:
/* * tcp_scan.c -- A large scale TCP ports scanner. * Created: Xie Han, net lab of Peking University. <e@pku.edu.cn> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA *//* I like BSD style better. */#define _BSD_SOURCE#include <errno.h>#include <sys/types.h>#include <sys/time.h>#include <sys/select.h>#include <sys/socket.h>#include <netinet/in.h>#include <netinet/ip.h>#include <netinet/ip_icmp.h>#ifdef IPV6# include <netinet/ip6.h># include <netinet/icmp6.h>#endif#include <netinet/tcp.h>#include <arpa/inet.h>#include <time.h>#include <unistd.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <rbtree.h>#include <unp.h>#include "tcp_scan.h"#define TCP_SCANNER_PORT		12200#define TCP_SCAN_REPEATS		4#define MAX_SEG_LIFETIME		30#define SET_FD_NONBLOCK(fd) \({																\	int __flags = fcntl(fd, F_GETFL, 0);						\	if (__flags >= 0)											\		__flags = fcntl(fd, F_SETFL, __flags | O_NONBLOCK);		\	__flags;													\})#ifdef IPV6# define IN6_ADDR_NEXT(addr) \do {															\	int i;														\	for (i = 15; i >= 0; i--)									\	{															\		if (++(addr)->s6_addr[i] != 0)							\			break;												\	}															\} while (0)#endif/* "sockaddr" structs arranged in a Red-Black tree. */struct __sockaddr_rb{	struct rb_node rb;	socklen_t addrlen;	struct sockaddr sockaddr;};/* Union of sockaddr. */union __sa_union{	struct sockaddr sockaddr;	struct sockaddr_in sin;#ifdef IPV6	struct sockaddr_in6 sin6;#endif};/* IP pseudoheader of TCP or UDP. */struct __ip_pheader{	struct in_addr src;	struct in_addr dst;	unsigned char zero;	unsigned char protocol;	unsigned short len;};#ifdef IPV6struct __ip6_pheader{	struct in6_addr src;	struct in6_addr dst;	unsigned int len;	unsigned short zero1;	unsigned char zero2;	unsigned char next;};#endif/* TCP header combined with IP pseudoheader. */struct __tcp_pheader{#ifdef IPV6	union	{		struct __ip6_pheader phdr6;		struct		{			char __null__[sizeof (struct __ip6_pheader) -						  sizeof (struct __ip_pheader)];			struct __ip_pheader phdr;		};	};#else	struct __ip_pheader phdr;#endif	struct tcphdr tcphdr;};unsigned short __tcp_scanner_port = TCP_SCANNER_PORT;int __tcp_scan_repeats = TCP_SCAN_REPEATS;int __max_seg_lifetime = MAX_SEG_LIFETIME;/* For the sake of simplicity. */static unsigned int __tcp_header_seq;static scan_info_t __info;static void *__arg;inline static void __make_tcp_ip_pheader(const struct in_addr *saddr,										 const struct in_addr *daddr,										 struct __ip_pheader *phdr){	phdr->src = *saddr;	phdr->dst = *daddr;	phdr->zero = 0;	phdr->protocol = IPPROTO_TCP;	phdr->len = htons(sizeof (struct tcphdr));}#ifdef IPV6inline static void __make_tcp_ip6_pheader(const struct in6_addr *saddr,										  const struct in6_addr *daddr,										  struct __ip6_pheader *phdr){	phdr->src = *saddr;	phdr->dst = *daddr;	phdr->len = htonl(sizeof (struct tcphdr));	phdr->zero1 = 0;	phdr->zero2 = 0;	phdr->next = IPPROTO_TCP;}#endif/* Send a TCP packet. (Without TCP options or TCP data.) */static int __tcp_send(int sockfd, struct __tcp_pheader *tcpphdr,					  const void *saddr, const struct sockaddr *daddr,					  socklen_t addrlen){	unsigned short *pfrom;	int len;	switch (daddr->sa_family)	{	case AF_INET:		__make_tcp_ip_pheader((const struct in_addr *)saddr,							  &((const struct sockaddr_in *)daddr)->							  sin_addr, &tcpphdr->phdr);		pfrom = (unsigned short *)&tcpphdr->phdr;		len = sizeof (struct __ip_pheader) + sizeof (struct tcphdr);		break;#ifdef IPV6	case AF_INET6:		__make_tcp_ip6_pheader((const struct in6_addr *)saddr,							   &((const struct sockaddr_in6 *)daddr)->							   sin6_addr, &tcpphdr->phdr6);		pfrom = (unsigned short *)&tcpphdr->phdr6;		len = sizeof (struct __ip6_pheader) + sizeof (struct tcphdr);		break;#endif	default:		errno = EAFNOSUPPORT;		return -1;	}	tcpphdr->tcphdr.th_sum = 0;	tcpphdr->tcphdr.th_sum = in_cksum(pfrom, len);	return sendto(sockfd, &tcpphdr->tcphdr, sizeof (struct tcphdr), 0,				  daddr, addrlen);}/* Send a SYN packet to the remote server. */static int __tcp_syn(int sockfd, unsigned short sport, unsigned short dport,					 const void *saddr, const struct sockaddr *daddr,					 socklen_t addrlen){	struct __tcp_pheader tcpphdr = {		tcphdr	:	{			th_sport	:	htons(sport),			th_dport	:	htons(dport),			th_seq		:	htonl(__tcp_header_seq),			th_ack		:	htonl(0),			th_x2		:	0,			th_off		:	sizeof (struct tcphdr) >> 2,			th_flags	:	TH_SYN,			th_win		:	htons(8192),			th_urp		:	htons(0)		}	};	return __tcp_send(sockfd, &tcpphdr, saddr, daddr, addrlen);}/* Tell the remote server that connection is aborted. */static int __tcp_rst(int sockfd, unsigned short sport, unsigned short dport,					 const void *saddr, const struct sockaddr *daddr,					 socklen_t addrlen){	struct __tcp_pheader tcpphdr = {		tcphdr	:	{			th_sport	:	htons(sport),			th_dport	:	htons(dport),			th_seq		:	htonl(0),			th_ack		:	htonl(0),			th_x2		:	0,			th_off		:	sizeof (struct tcphdr) >> 2,			th_flags	:	TH_RST,			th_win		:	htons(0),			th_urp		:	htons(0)		}	};	return __tcp_send(sockfd, &tcpphdr, saddr, daddr, addrlen);}/* Search a sockaddr in a Red-Black tree. */static struct __sockaddr_rb *__rb_search_sockaddr(const struct sockaddr *sockaddr, socklen_t addrlen,					 const struct rb_root *root){	const struct rb_node *p = root->node;	struct __sockaddr_rb *entry;	int n;	while (p)	{		entry = rb_entry(p, struct __sockaddr_rb, rb);		if (addrlen < entry->addrlen)			n = -1;		else if (addrlen > entry->addrlen)			n = 1;		else if ((n = memcmp(sockaddr, &entry->sockaddr, addrlen)) == 0)			return entry;		p = n < 0 ? p->left : p->right;	}	return NULL;}/* Insert a sockaddr into a Red-Black tree. */static struct __sockaddr_rb *__rb_insert_sockaddr(const struct sockaddr *sockaddr, socklen_t addrlen,					 struct rb_root *root){	struct rb_node **p = &root->node;	struct rb_node *parent = NULL;	struct __sockaddr_rb *entry;	int n;	while (*p)	{		parent = *p;		entry = rb_entry(parent, struct __sockaddr_rb, rb);		if (addrlen < entry->addrlen)			n = -1;		else if (addrlen > entry->addrlen)			n = 1;		else if ((n = memcmp(sockaddr, &entry->sockaddr, addrlen)) == 0)			return entry;		p = n < 0 ? &parent->left : &parent->right;	}	#define __SOCKADDR_RB_LEN \		(sizeof (struct __sockaddr_rb) - sizeof (struct sockaddr) + addrlen)	if (entry = (struct __sockaddr_rb *)malloc(__SOCKADDR_RB_LEN))	{		entry->addrlen = addrlen;		memcpy(&entry->sockaddr, sockaddr, addrlen);		rb_link_node(&entry->rb, parent, p);		rb_insert_color(&entry->rb, root);		return NULL;	}	#undef __SOCKADDR_RB_LEN	return (struct __sockaddr_rb *)-1;}static void __rb_destroy_sockaddr(struct rb_root *root){	struct __sockaddr_rb *entry;	while (root->node)	{		entry = rb_entry(root->node, struct __sockaddr_rb, rb);		rb_erase(root->node, root);		free(entry);	}}static int __proc_tcp_packet(int sockfd, const struct tcphdr *tcphdr,							 const void *daddr, const struct sockaddr *saddr,							 socklen_t addrlen, struct rb_root *root){	struct __sockaddr_rb *entry;	int state;	if (ntohs(tcphdr->th_dport) == __tcp_scanner_port)	{		if (tcphdr->th_flags & (TH_SYN | TH_RST) &&			tcphdr->th_flags & TH_ACK &&			ntohl(tcphdr->th_ack) == __tcp_header_seq + 1)		{			if (tcphdr->th_flags & TH_SYN)			{				/* The connection is accepted. Abort it. */				__tcp_rst(sockfd, __tcp_scanner_port,						  ntohs(tcphdr->th_sport),						  daddr, saddr, addrlen);			}			if (!(entry = __rb_insert_sockaddr(saddr, addrlen, root)))			{				state = tcphdr->th_flags & TH_SYN ? TS_ACCEPTED : TS_REFUSED;				if (__info(saddr, addrlen, state, __arg) < 0)					return -1;			}			else if (entry == (struct __sockaddr_rb *)-1)				return -1;		}	}	return 0;}static int __recv_tcp_packet(int sockfd, struct rb_root *root){	/* We do not care the TCP options or TCP data, so the buffer size is the	   biggest IPv4 header size, which is bigger than IPv6 header size, plus	   TCP header size. */	#define __BUFSIZE	((0xf << 2) + sizeof (struct tcphdr))	char buf[__BUFSIZE];	struct ip *iphdr = (struct ip *)buf;#ifdef IPV6	struct ip6_hdr *ip6hdr = (struct ip6_hdr *)buf;#endif	struct tcphdr *tcphdr;	union __sa_union un;	socklen_t addrlen;	ssize_t n;	while (addrlen = sizeof (union __sa_union), (n = recvfrom(sockfd, buf,							__BUFSIZE, 0, &un.sockaddr, &addrlen)) >= 0)	{		if (un.sockaddr.sa_family == AF_INET)		{			/* Make sure that it is a valid TCP packet. */			if (n >= sizeof (struct ip) && iphdr->ip_p == IPPROTO_TCP &&				n >= (iphdr->ip_hl << 2) + sizeof (struct tcphdr))			{				tcphdr = (struct tcphdr *)(buf + (iphdr->ip_hl << 2));				un.sin.sin_port = tcphdr->th_sport;				if (__proc_tcp_packet(sockfd, tcphdr, &iphdr->ip_dst,									  &un.sockaddr, addrlen, root) < 0)					break;			}		}#ifdef IPV6		else if (un.sockaddr.sa_family == AF_INET6)		{			if (n >= sizeof (struct ip6_hdr) + sizeof (struct tcphdr) &&				ip6hdr->ip6_nxt == IPPROTO_TCP)			{				tcphdr = (struct tcphdr *)(ip6hdr + 1);				un.sin6.sin6_port = tcphdr->th_sport;				if (__proc_tcp_packet(sockfd, tcphdr, &ip6hdr->ip6_dst,									  &un.sockaddr, addrlen, root) < 0)					break;			}		}#endif	}	#undef __BUFSIZE	return n < 0 && errno == EAGAIN ? 0 : -1;}static int __proc_icmp_packet(const struct icmp *icmp, size_t icmplen,							  struct sockaddr *saddr, socklen_t addrlen,							  struct rb_root *root){	struct __sockaddr_rb *entry;	const struct ip *iphdr;	const struct tcphdr *tcphdr;	/* We care only ICMP unreach packet. */	#define __offset(type, member)	((size_t)&((type *)0)->member)	if (icmp->icmp_type == ICMP_UNREACH)	{	/*	if (icmplen >= sizeof (struct icmp) + sizeof (struct ip))	*/		if (icmplen >= __offset(struct icmp, icmp_data) + sizeof (struct ip))		{			iphdr = (const struct ip *)icmp->icmp_data;			if (icmplen >= __offset(struct icmp, icmp_data) +						   (iphdr->ip_hl << 2) + 8)			{				tcphdr = (const struct tcphdr *)((const char *)iphdr +												 (iphdr->ip_hl << 2));				if (ntohs(tcphdr->th_sport) == __tcp_scanner_port &&					ntohl(tcphdr->th_seq) == __tcp_header_seq)				{					((struct sockaddr_in *)saddr)->sin_port = tcphdr->th_dport;					if (!(entry = __rb_insert_sockaddr(saddr, addrlen, root)))					{						if (__info(saddr, addrlen, TS_UNREACH, __arg) < 0)							return -1;					}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91视频观看视频| 久久精品在这里| 精品久久久三级丝袜| 中文字幕va一区二区三区| 性做久久久久久久久| 成人黄色在线网站| 精品不卡在线视频| 亚洲不卡av一区二区三区| 成人av免费网站| 日韩美女主播在线视频一区二区三区| 亚洲日本一区二区三区| 国产在线不卡视频| 91精品国产麻豆| 亚洲黄色小说网站| 99久久99久久久精品齐齐| 久久久99精品免费观看不卡| 午夜精品久久久| 在线观看不卡一区| 日韩伦理av电影| 丁香桃色午夜亚洲一区二区三区 | 国产精品欧美综合在线| 蜜桃av一区二区| 在线播放一区二区三区| 亚洲第一成人在线| 91成人在线观看喷潮| 最新中文字幕一区二区三区| 国产成人综合在线| 国产亚洲成aⅴ人片在线观看| 激情六月婷婷久久| 日韩三级伦理片妻子的秘密按摩| 五月天丁香久久| 制服视频三区第一页精品| 一区二区三区中文在线| 在线欧美小视频| 视频一区国产视频| 欧美亚洲综合在线| 亚洲v日本v欧美v久久精品| 欧美视频日韩视频在线观看| 亚洲午夜国产一区99re久久| 在线免费不卡视频| 亚洲国产美国国产综合一区二区| 在线观看91精品国产入口| 亚洲综合精品自拍| 欧美嫩在线观看| 精品在线免费视频| 国产日韩欧美精品电影三级在线| 成人手机电影网| 亚洲精品自拍动漫在线| 欧美日韩免费观看一区三区| 日韩国产精品91| 久久久一区二区三区捆绑**| 国产成a人无v码亚洲福利| 日韩美女视频19| 在线电影欧美成精品| 激情综合网最新| 国产精品久久久久天堂| 欧美优质美女网站| 麻豆精品国产91久久久久久| 国产亚洲精久久久久久| 一本色道久久综合亚洲91| 五月激情综合色| 久久久综合激的五月天| 一本色道久久综合亚洲精品按摩| 日韩成人一区二区三区在线观看| 久久久一区二区| 日本道精品一区二区三区 | 色诱视频网站一区| 午夜国产精品影院在线观看| 久久色中文字幕| 欧美综合一区二区| 国产精品原创巨作av| 一区二区三区日韩欧美精品 | 亚洲二区在线视频| 久久嫩草精品久久久精品一| 91网站在线观看视频| 久久se精品一区二区| 亚洲麻豆国产自偷在线| 337p日本欧洲亚洲大胆精品| 色综合中文字幕| 国产一区二区三区黄视频| 亚洲一区av在线| 欧美激情一区二区三区蜜桃视频| 欧美久久久久久久久| av毛片久久久久**hd| 国内精品写真在线观看| 亚洲一区二区不卡免费| 国产色产综合色产在线视频| 4438x亚洲最大成人网| 成人精品免费网站| 久久69国产一区二区蜜臀| 亚洲精品你懂的| 欧美激情在线观看视频免费| 欧美一卡二卡三卡四卡| 欧美视频在线一区| 91免费版pro下载短视频| 国产毛片一区二区| 另类专区欧美蜜桃臀第一页| 夜夜嗨av一区二区三区 | 欧美日韩高清不卡| 91美女片黄在线观看91美女| 国产成人免费在线视频| 国产最新精品免费| 伦理电影国产精品| 免费视频最近日韩| 午夜精品久久久久久久久久| 一区二区三区日韩精品| 亚洲婷婷综合久久一本伊一区| 久久久久久久国产精品影院| 日韩免费看网站| 日韩亚洲国产中文字幕欧美| 欧美丰满美乳xxx高潮www| 欧美性受xxxx| 欧美日韩中文另类| 欧美亚洲综合网| 欧美大白屁股肥臀xxxxxx| 欧美日韩国产一区二区三区地区| 一本一道久久a久久精品| 色综合久久久久综合99| 91小视频免费观看| 在线亚洲免费视频| 色狠狠一区二区| 欧美亚州韩日在线看免费版国语版| 色视频欧美一区二区三区| 欧美亚洲免费在线一区| 欧美巨大另类极品videosbest | 9色porny自拍视频一区二区| 高清成人在线观看| 成人性生交大片免费| 99视频一区二区三区| 色先锋资源久久综合| 欧美视频一区二区三区在线观看| 欧美性大战久久久久久久蜜臀| 欧美日韩国产一级片| 精品日本一线二线三线不卡| 久久精品一区二区三区四区| 一区视频在线播放| 亚洲一区二区三区四区五区中文| 亚洲va天堂va国产va久| 免费看欧美女人艹b| 国产成人在线观看免费网站| 91蜜桃网址入口| 欧美一区二区福利在线| 国产精品免费久久| 五月激情综合色| 成人午夜视频免费看| 欧美亚洲精品一区| 2023国产精品| 亚洲精品中文在线影院| 久久se这里有精品| 欧洲亚洲精品在线| 精品国产一区二区三区忘忧草| 最新不卡av在线| 极品少妇xxxx精品少妇偷拍| 99热国产精品| 久久综合色8888| 亚洲综合成人在线视频| 国产在线一区二区| 精品视频1区2区| 欧美韩国日本不卡| 青青草视频一区| 91久久国产最好的精华液| 久久先锋影音av鲁色资源| 秋霞成人午夜伦在线观看| 国产成人一区二区精品非洲| 欧美午夜免费电影| 中文字幕 久热精品 视频在线| 日本在线不卡视频| 91丨porny丨中文| 久久亚洲影视婷婷| 午夜精品久久久久久久久久| 岛国av在线一区| 精品少妇一区二区三区日产乱码 | 欧美日韩不卡一区二区| 久久精品在线免费观看| 蜜桃av一区二区| 欧美视频中文字幕| 亚洲美女视频在线观看| 成人污污视频在线观看| 精品国产免费一区二区三区香蕉 | 国产视频在线观看一区二区三区| 午夜精品久久久久久久久久 | 国产女人aaa级久久久级| 卡一卡二国产精品| 欧美日韩精品一区二区天天拍小说| 国产人伦精品一区二区| 免费国产亚洲视频| 3d成人h动漫网站入口| 亚洲国产精品久久艾草纯爱| 91香蕉国产在线观看软件| 亚洲国产高清在线观看视频| 久久国产乱子精品免费女| 制服丝袜亚洲色图| 污片在线观看一区二区| 欧美日韩视频在线观看一区二区三区| 国产精品天干天干在线综合| 国产99久久久国产精品潘金| 久久久久久毛片| 国产**成人网毛片九色| 国产农村妇女精品| 成人av在线播放网站|