- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这是 recv()
的奇怪行为。我正在使用libnetfilter_queue
图书馆和iptables
为了根据源端口将传入数据包存储到三个不同的队列中(由于下面编写的 iptables
规则,我检查了此情况)。
基本上,我收到的数据包的有效负载始终包含字母 E
。这是我的代码(为了简洁起见,我省略了对错误的控制)。
/* bunch of #include <whatineed.h> */
int main() {
pthread_t threads[3];
pthread_create(&threads[0], NULL, queueThread, (void *)0);
pthread_create(&threads[1], NULL, queueThread, (void *)1);
pthread_create(&threads[2], NULL, queueThread, (void *)2);
pthread_exit(NULL);
return 0;
}
每个线程执行的函数:
void *queueThread(void *queuenum) {
int fd, rv;
int queue_num = (int)queuenum;
struct nfq_handle *h = NULL;
struct nfq_q_handle *qh = NULL;
char buf[8192] __attribute__ ((aligned));
/* queue handling setup */
h = nfq_open();
nfq_unbind_pf(h, AF_INET);
nfq_bind_pf(h, AF_INET);
qh = nfq_create_queue(h, queue_num, &packetHandler, NULL);
nfq_set_queue_maxlen(qh, 10000);
nfq_set_mode(qh, NFQNL_COPY_PACKET, 0xffff);
memset(buf, '\0', sizeof(buf));
/* Tried to increase socket buffer size, but nothing changes */
nfnl_rcvbufsiz(nfq_nfnlh(h), 10000 * 1500);
fd = nfq_fd(h);
while ((rv = recv(fd, buf, sizeof(buf), 0)) > 0)) {
printf("queueThread: read %d bytes from file descriptor %d\n", rv, fd);
nfq_handle_packet(h, buf, rv);
}
nfq_destroy_queue(qh);
nfq_close(h);
pthread_exit(NULL);
}
对我从 queueThread
获得的每个数据包调用的回调函数:
int packetHandler(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,
struct nfq_data *nfa, void *data) {
struct nfqnl_msg_packet_hdr *ph = NULL;
unsigned char *nf_packet = NULL;
int pkt_size = 0;
ph = nfq_get_msg_packet_hdr(nfa);
int id = ntohl(ph -> packet_id);
pkt_size = nfq_get_payload(nfa, &nf_packet);
printf("packetHandler: pkt is %d byte, it says: %s\n", pkt_size, nf_packet);
/* Let's check, e.g., its protocol */
struct iphdr *iph = (struct iphdr *) (nf_packet + sizeof(struct ethhdr));
printf("packetHandler: pkt protocol is %d\n", iph->protocol);
return nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);
}
在iptables
上设置以下规则后:
sudo iptables -I INPUT -p tcp --sport 25 -j NFQUEUE --queue-num 0
sudo iptables -I INPUT -p tcp --sport 80 -j NFQUEUE --queue-num 1
sudo iptables -I INPUT -p udp --sport 5060 -j NFQUEUE --queue-num 2
sudo iptables -I INPUT -p tcp --sport 5060 -j NFQUEUE --queue-num 2
在浏览器上打开一个新选项卡并加载页面(因此,获取来自端口 80 的数据包),这是我的输出:
queueThread: read 148 bytes from file descriptor 4
packetHandler: pkt is 60 byte, it says: E
packetHandler: pkt protocol is 35
queueThread: read 148 bytes from file descriptor 4
packetHandler: pkt is 60 byte, it says: E
packetHandler: pkt protocol is 35
queueThread: read 148 bytes from file descriptor 4
packetHandler: pkt is 60 byte, it says: E
packetHandler: pkt protocol is 35
我也尝试过 nping
通过在另一个终端中向我自己发送来自端口 25 和端口 5060 的数据包,结果是相同的:奇怪的协议(protocol)号并且始终是字母 E。我无法正确地将有效负载转换为 tcphdr
或udphdr
构造并获取我需要的数据,因为我不知道我从 queueThread()
得到了什么以及我传递给 packetHandler()
的内容.
最佳答案
显然,我的错误是将 sizeof(struct ethhdr)
添加到有效负载中,以便到达数据包的 IP header :这就是为什么我总是得到奇怪的协议(protocol)和端口号,我在一个我不应该在的地方的偏移。仍然有 E
但没关系,我现在可以成功读取协议(protocol)和端口号;抱歉打扰了我。
这是我发现这一点的地方:How does nfq_get_payload structure its return data?
关于c - 转换到 iphdr 和 tcphdr 的正确偏移量是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31461088/
我正在尝试从第 4 到 9 页以及第 12 和 13 页上的单元格中清除所有内容(包括图像)。我有以下代码,但它正在清除第 3-9 和 12-15 页中的内容,我不知道为什么。 有什么想法吗? Sub
有没有办法增加极坐标图刻度标签(θ)的填充/偏移? import matplotlib import numpy as np from matplotlib.pyplot import figure,
我正在调用本地 API 并尝试以分页 样式进行操作。我有 n 张图片,我想将它们分成 n/4 行(每行 4 张图片)。因此,我正在调用我的 API,images/count,offset。但不知何故,
我的问题解释起来有点棘手,但无论如何我都会尝试。我有两个水平选项卡,当您单击它们时,会打开一个文本框内容。当他们被点击时,我试图“关注”他们。我在网上找到了很多资料,但除了我在下面显示的这段代码外,没
所以我有一个 float 的 div,我需要它始终向右 200 像素,并填充窗口的其余部分。有没有某种跨浏览器兼容的方法,我可以在不借助 javascript 的情况下使宽度填满页面的其余部分? 最佳
我有以下片段 $('html,body').animate({scrollTop: $('#menu').offset().top}, 'slow'); 单击链接时,我希望浏览器从#menu div
我目前正在为我的应用程序使用 JASidePanel,并且我有一个 UITableViewcontroller 和一个 UIRefreshControl 作为它的 ViewController 之一。
给出以下代码: imshow(np.arange(16*16).reshape(16,16)) cb = colorbar() cb.set_label("Foo") cb.set_ticks([0,
我是编程新手,我认为 VBA 是一个很好的起点,因为我在 Excel 中做了很多工作。 我创建了一个宏,它从输入框中获取一个整数(我一直使用 2、3 和 4 来测试),并创建该数字的一组 4 层层次结
我在 PHP 中有一个 unix 时间戳: $timestamp = 1346300336; 然后我有一个我想要应用的时区的偏移量。基本上,我想应用偏移量并返回一个新的 unix 时间戳。偏移量遵循这
演示:http://jsfiddle.net/H45uY/6/ 我在这里想做的是将 的左上角设为跟随鼠标。代码在没有段落的情况下工作正常(请参阅上面的演示),但是当您添加段落时,被向上推,鼠标位于盒
假设我们有两个由无符号长(64 位)数组表示的位图。我想使用特定的移位(偏移)合并这两个位图。例如,将位图 1(较大)合并到位图 2(较小)中,起始偏移量为 3。偏移量 3 表示位图 1 的第 3 位
通过在 pageViewController 中实现 tableView,tableView 与其显示的内容不一致。对此最好的解决办法是什么? 最佳答案 如果您的 TableView 是 View C
我设置了一个在 nib 中显示地点信息的地点配置文件。当我在标准屏幕流程中推送此 View 时,它工作正常。但是,当我从另一个选项卡推送此 View 时,UINavigationBar 似乎抵消了它,
如果我想选择 5 条记录,我会这样做: SELECT * FROM mytable LIMIT 5 如果我想添加偏移量,我会这样做: SELECT * FROM mytable OFFSET 5 LI
我有一个应用程序,其中某些 View 需要全屏,而其他 View 不需要全屏。在某些情况下,我希望背景显示在状态栏下方,所以我在 View 加载时使用它来使 Activity 全屏显示: window
在下图中,我进行绘制,结果位于 A 点,就在我手指接触的地方。 如何使图像显示在实际触摸上方约 40pt。 (二) 我正在使用经典的 coreGraphic UITouch 代码,如下所示: - (v
只要键盘处于事件状态,我就会尝试偏移 UITextField,效果很好,直到我尝试了表情符号布局。有没有办法检测键盘输入的类型,以便找出高度差?谢谢 最佳答案 不是使用 UIKeyboardDidSh
这是我的 Swift 代码 (AppDelegate.swift): var window: UIWindow? var rootViewController :UIViewController? f
我有一个 div 作为绝对定位的 body 的直接子节点,其 css 属性定义如下: div[id^="Container"] { display: block; position: a
我是一名优秀的程序员,十分优秀!