- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在向同一网络中的网络服务器发送 TCP SYN 数据包(无负载)。我正在使用sniffex.c用于捕获数据包。
问题是,在我发送 SYN 数据包后,我没有收到来自服务器的 SYN/ACK 数据包。
在 sniffex.c 中:我使用我的 LAN IP 作为源 ip。我已将过滤器设置为 "tcp" 。我正在发送到端口 80
当我打印发送的数据包的字段时,在使用 sniffex 捕获它之后,所有字段都被正确打印,因此我假设发送的数据包的结构使得服务器可以理解它。
当我使用浏览器连接到网络服务器时,成功接收到 SYN/ACK。
另一个相关查询:如何设置过滤器,以便仅获取与此对话相关的数据包(黑白我的电脑和网络服务器)
我使用的是 UBUNTU 14.04
编辑:我尝试发送数据包的 c 文件
#define __USE_BSD /* use bsd'ish ip header */
#include <sys/socket.h> /* these headers are for a Linux system, but */
#include <netinet/in.h> /* the names on other systems are easy to guess.. */
#include <netinet/ip.h>
#define __FAVOR_BSD /* use bsd'ish tcp header */
#include <netinet/tcp.h>
#include <unistd.h>
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
#include<errno.h>
#include<sys/socket.h>
#include<sys/types.h>
#define P 80 /* lets flood the sendmail port */
unsigned short /* this function generates header checksums */
csum (unsigned short *buf, int nwords)
{
unsigned long sum;
for (sum = 0; nwords > 0; nwords--)
sum += *buf++;
sum = (sum >> 16) + (sum & 0xffff);
sum += (sum >> 16);
return ~sum;
}
int
main (void)
{
int s = socket (AF_INET, SOCK_RAW, IPPROTO_TCP);
printf("s=%d\n",s); /* open raw socket */
char datagram[4096]; /* this buffer will contain ip header, tcp header,
and payload. we'll point an ip header structure
at its beginning, and a tcp header structure after
that to write the header values into it */
struct ip *iph = (struct ip *) datagram;
struct tcphdr *tcph = (struct tcphdr *) (datagram + sizeof (struct ip));
struct sockaddr_in sin;
/* the sockaddr_in containing the dest. address is used
in sendto() to determine the datagrams path */
sin.sin_family = AF_INET;
sin.sin_port = htons (P);/* you byte-order >1byte header values to network
byte order (not needed on big endian machines) */
sin.sin_addr.s_addr = inet_addr ("xxx.xxx.xxx.xxx");
memset (datagram, 0, 4096); /* zero out the buffer */
/* we'll now fill in the ip/tcp header values, see above for explanations */
iph->ip_hl = 5;
iph->ip_v = 4;
iph->ip_tos = 0;
iph->ip_len = sizeof (struct ip) + sizeof (struct tcphdr); /* no payload */
iph->ip_id = htonl (54321); /* the value doesn't matter here */
iph->ip_off = 0;
iph->ip_ttl = 255;
iph->ip_p = 6;
iph->ip_sum = 0; /* set it to 0 before computing the actual checksum later */
iph->ip_src.s_addr = inet_addr ("xxx.xxx.xxx.xxx");/* SYN's can be blindly spoofed */
iph->ip_dst.s_addr = sin.sin_addr.s_addr;
tcph->th_sport = htons (2000); /* arbitrary port */
tcph->th_dport = htons (P);
tcph->th_seq = random();/* in a SYN packet, the sequence is a random */
tcph->th_ack = 0;/* number, and the ack sequence is 0 in the 1st packet */
tcph->th_x2 = 5;
tcph->th_off = 5; /* first and only tcp segment */
tcph->th_flags = TH_SYN; /* initial connection request */
tcph->th_win = htonl (65535); /* maximum allowed window size */
tcph->th_sum = 0;/* if you set a checksum to zero, your kernel's IP stack
should fill in the correct checksum during transmission */
tcph->th_urp = 0;
iph->ip_sum = csum ((unsigned short *) datagram, iph->ip_len >> 1);
/* finally, it is very advisable to do a IP_HDRINCL call, to make sure
that the kernel knows the header is included in the data, and doesn't
insert its own header into the packet before our data */
/* lets do it the ugly way.. */
int one = 1;
// const int *val = &one;
if (setsockopt (s, IPPROTO_IP, IP_HDRINCL, &one, sizeof (one)) < 0)
printf ("Warning: Cannot set HDRINCL!\terrno = %d\n",errno);
// while (1)
// {
if (sendto (s, /* our socket */
datagram, /* the buffer containing headers and data */
iph->ip_len, /* total length of our datagram */
0, /* routing flags, normally always 0 */
(struct sockaddr *) &sin, /* socket addr, just like in */
sizeof (sin)) < 0) /* a normal send() */
printf ("error\n");
else
printf ("SUCCESS\n\n\n\n");
//}
char buffer[8192];
memset (buffer, 0, 8192);
int n;
//while(n=read (s, buffer, 8192) > 0)
//{
//printf("n=%d\n",n);
//printf ("Caught tcp packet: %s\n", buffer);
//memset (buffer, 0, 8192);
//}
return 0;
}
最佳答案
[聊天摘要]除了 iph->ip_off 问题之外,您可能还需要自己计算 TCP 校验和(您的操作系统可能不会为您计算)。有用的信息在这里:http://www.tcpipguide.com/free/t_TCPChecksumCalculationandtheTCPPseudoHeader-2.htm 和 http://www.netfor2.com/tcpsum.htm
此外,tcph->th_seq = htonl(23456);
也可能有用。
关于c - 使用 RAW 套接字发送 SYN 后未收到 SYN/ACK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29877735/
从数据包捕获文件(pcap)中,在 TCP 握手期间观察以下内容 Client向Server发送SYN请求,服务器响应SYN包而不是SYN+ACK,客户端响应 Out of Order 数据包消息,服
我遇到过这种情况: 我已经阻止了所有入站端口,除了(tcp 53 和 udp 53 - DNS、2 个内部 ip 类和 ICMP),我尝试连接到 google 但没有成功,这很好。但是,使用数据包捕获
我正在编写以下程序(虽然我不认为这是问题所在): #include #include #include #include #include #include int main() {
如果发送方第一次发送SYN,但发送方在超时时间内没有收到SYN/ACK。 (Q1)当发送方再次重传SYN时,重传的SYN是否与之前的SYN相同? (Q2) 它们的序列号是否相同? 最佳答案 是的,但您
我正在试验 Rust 过程宏。 我希望能够创建一个用于生成 JNI 调用样板的宏。有点像 jni_method!{com.purplefrog.rust_callable.Widget, fn ech
我正在向同一网络中的网络服务器发送 TCP SYN 数据包(无负载)。我正在使用sniffex.c用于捕获数据包。 问题是,在我发送 SYN 数据包后,我没有收到来自服务器的 SYN/ACK 数据包。
我对原始套接字以及如何创建它们感到好奇,并且想实现我自己的 TCP 机制。我已经阅读了一些示例,并成功地发送了带有我自己编写的 IP header 的自定义 TCP 数据包和 UDP 数据包(当然受到
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 8 年前。 Improve this qu
如果您正在编写一个基本的 python TCP 服务器和客户端,您需要自己添加 SYN、SYN ACK 和 ACK 响应,还是由套接字模块处理? 如果需要自己写,会这么简单吗? 客户: #set up
我目前正在开发 TCP/IP 堆栈;我在 Linux 下运行,我使用 libnet(用于传输)和 libpcap(用于捕获以太网帧)来模拟链路层。 我已经开始研究 TCP,更具体地说是主动打开连接。基
使用 hping,我发送 SYN 数据包,第二个对等方正在监听并回复 SYN/ACK,但是 hping(我猜是 linux 内核这样做)在收到 SYN/ACK 后发送 RST。 无论如何我可以在收到
我试图让 Vim 以语法高亮任何以扩展名 .Rtex 结尾的文件,方法如下: 所有顶级文本都突出显示为 TeX 异常(exception):包含在 \begin{python}...\end{pyth
我有 TCP 客户端和服务器套接字,并且在客户端和服务器套接字上设置了具有不同值的套接字选项 IP_TOS(例如 Client dscp = 0x21 和 Server Dscp = 0x38)。现在
我正在解析一个 PCAP 文件,我只需要提取 TCP 标志 (SYN) 来检测 SYN 泛洪攻击。我使用 Python 和 scapy。 主要目标是检测 SYN 洪水攻击的方法!我需要为每个 IP 地
这可能是一个微不足道的问题。这是关于 Syn Cookie 的。为什么只有半打开的连接才被视为DOS攻击。客户端可能完成握手(SYN、SYN-ACK、ACK)后就不再回复。这也会占用系统资源。 那么,
如果我的服务器实现了 SYN Cookies 来避免 DoS 攻击,但攻击者知道服务器使用 SYN Cookies,他们是否可以通过发送 ACK 来创建半/全打开连接? 我知道 SYN Cookies
我正在尝试使用 syn从 Rust 文件创建 AST,然后使用 quote把它写给另一个。但是,当我编写它时,它在所有内容之间放置了额外的空间。 请注意,下面的示例只是为了演示我遇到的最小可重现问题。
我正在 Objective C 和 C 中实现 TCP。当我向服务器发送 Syn 数据包时,我没有得到答复。数据包的 pcap 文件可以在这里找到: Tcp-Syn.pcap 数据包是否格式错误,或者
我正在为将通过以太网发送一些数据的微芯片编写软件,但我遇到了一个问题。我正在发送一个 TCP SYN 段,但没有收到服务器的答复。 一切看起来都很好,获得答案的数据包与我的数据包之间的唯一区别是我的数
我正在使用的 Mac OSX 网络客户端有时无法连接到 HTTPS 端口。查看网络跟踪,我们看到了这一点: T0.0 client:port -> server:443 SYN T0.1 server
我是一名优秀的程序员,十分优秀!