我正在尝试实现SSDP协议,但我不确定它是如何工作的 . SSDP通过udp发送数据,这很清楚 . 如果控制器连接到网络,它可以搜索具有MSEARCH消息的设备,该消息可以发送到多播地址239.255.255.250:1900 . 每个设备都必须收听此地址并做出响应 . 但我不知道他们是如何回应的 . 我在wireshark中看到他们用单播响应,但我不知道如何确定接收响应的端口 .

编辑 - - - - - - - -

我正在尝试使用spike fuzzing框架编写ssdp fuzzer . 正如我所说,我能够发送正确的数据,但无法收到回复 . 我将尝试粘贴一些尖峰代码并简要说明 . 有Spike结构,它代表要发送的数据(它存储实际数据,大小,协议信息......) . 我删除了一些变量以使其更清晰 .

struct spike {

/*total size of all data*/

unsigned long datasize;

unsigned char *databuf;

unsigned char *endbuf;

int fd; /*for holding socket or file information*/

int proto; /*1 for tcp, 2 for udp*/

struct sockaddr_in *destsockaddr;

};

现在我通过udp发送数据,并希望通过以下功能接收一些响应

spike_connect_udp(target,port);

spike_send();

s_read_packet();

功能实现:

int

spike_connect_udp(char * host, int port)

{

int fd;

/*ahh, having udpstuff.c makes this stuff easy*/

fd=udpconnect(host,port);

if (fd==-1)

{

fprintf(stderr,"Couldn't udp connect to target\n");

return (0);

}

current_spike->fd=fd;

current_spike->proto=2; /*UDP*/

return 1;

}

int

udpconnect(const char * host, const unsigned short port )

{

int sfd = -1;

struct sockaddr_in addr;

/* Translate hostname from DNS or IP-address form */

memset(&addr, 0, sizeof(addr));

if (!getHostAddress(host, &addr))

{

hdebug("can't resolve host or address.\n");

return -1;

}

addr.sin_family = AF_INET;

addr.sin_port = ntohs(port);

if ((sfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)

{

hdebug("Could not create socket!\n");

return -1;

}

/* Now connect! */

if (connect(sfd, (struct sockaddr *)&addr, sizeof(addr)) < 0)

{

close(sfd);

return -1;

}

return sfd;

}

int

spike_send()

{

int retval;

switch (current_spike->proto)

{

case 1: /*TCP*/

//deleted, doesnt matter, i am sending via udp

case 2: /*UDP*/

//udp_write_data is function from framework

retval=udp_write_data(current_spike->fd, current_spike->destsockaddr, s_get_size(), s_get_databuf());

break;

}

fflush(0);

return retval;

}

这很好,并通过udp发送数据 . 现在我想通过open socket current_spike-> fd收到一些回复 . 函数s_read_packet void

s_read_packet()

{

unsigned char buffer[5000];

int i;

int size;

s_fd_wait();

printf("Reading packet\n");

memset(buffer,0x00,sizeof(buffer));

/what alarm and fcntl does?

alarm(1);

fcntl(current_spike->fd, F_SETFL, O_NONBLOCK);

//this read return error -1 and sets errno to 11 service temporarily unavailable

size=read(current_spike->fd,buffer,1500);

fcntl(current_spike->fd, F_SETFL, 0);

alarm(0);

for (i=0; i

{

if (isprint(buffer[i]))

printf("%c",buffer[i]);

else

printf("[%2.2x]",buffer[i]);

}

printf("\nDone with read\n");

}

int

s_fd_wait()

{

/*this function does a select to wait for

input on the fd, and if there

is, returns 1, else 0 */

int fd;

fd_set rfds;

struct timeval tv;

int retval;

fd=current_spike->fd;

/* Watch server_fd (fd 0) to see when it has input. */

FD_ZERO(&rfds);

FD_SET(fd, &rfds);

/* Wait up to zero seconds . will this wait forever? not on linux.*/

/* from man page: timeout is an upper bound on the amount of time

elapsed before select returns. It may be zero, causing select

to return immediately. If timeout is NULL (no timeout), select

can block indefinitely. */

/*wait 2 seconds only*/

tv.tv_sec = TIMEINSECONDS;

tv.tv_usec = TIMEINUSECONDS;

//printf("Before select %d:%d\n",TIMEINSECONDS,TIMEINUSECONDS);

retval = select(fd+1, &rfds, NULL, NULL, &tv);

/* Don't rely on the value of tv now! */

//printf("After select retval=%d.\n",retval);

switch (retval)

{

case 0:

/*Timeout - no packet or keypress*/

return(0);

break;

case -1:

/* ignore interrupted system calls */

if (errno != EINTR)

{

/*some kind of weird select error. Die. */

exit(-1);

}

/*otherwise we got interrupted, so just return false*/

return (0);

break;

default:

{

if (FD_ISSET(fd,&rfds))

return (1);

else

return (0);

}

}

}

但是函数s_read_packet没有产生数据......

ssdp java_SSDP协议 - 实施相关推荐

  1. rtp 多媒体流同步控制 实时传输协议 简介

    RTP(Real-time Transport Protocol)是由IETF开发的实时传输协议,可以在面向连接或无连接的下层协议上工作,通常和UDP协议一起使用.RTP的工作机理与RSVP不同,主要 ...

  2. UDP协议抓包分析 -- wireshark

    UDP协议抓包分析 – wireshark UDP是User Datagram Protocol用户数据报协议的简称.他是OSI七层模型中一种无连接的传输层协议,提供面向事务的简单的不可靠信息传送服务 ...

  3. 【百度】大型网站的HTTPS实践(一)——HTTPS协议和原理

    大型网站的HTTPS实践(一)--HTTPS协议和原理 原创 网络通信/物联网 作者:AIOps智能运维 时间:2018-11-09 15:07:39  349  0 前言 百度于2015年上线了全站 ...

  4. 关于socket组播和ssdp(二)

    关于socket组播和ssdp(一) 1.说明 在制作的过程中,实际上ssdp发现协议特别简单,只是加入组播后,发送搜索的字符串,然后再在单播上接收,如果是发送,则要发送到多播地址,而且,发送的字符串 ...

  5. 投放屏幕upnp协议探究抓包

    要了解DLNA需要了解upnp,因为DLNA在upnp之上 whireshark 抓包工具准备 先把whireshark打开 使用过滤器把网关的包去掉,不然干扰太多,首先说明,只要发包网关一定会发很多 ...

  6. 没有到主机的路由_网络基础知识:TCP协议之跟踪路由

    一次性付费进群,长期免费索取教程,没有付费教程. 进微信群回复公众号:微信群:QQ群:460500587  教程列表 见微信公众号底部菜单 |  本文底部有推荐书籍  微信公众号:计算机与网络安全 I ...

  7. php mysql合同跟踪,使用TCP协议进行路由跟踪

    当目标主机禁止 ping 时,就无法通过 ICMP 请求包进行路由跟踪,这时可以借助 TCP 协议实施跟踪. 用户可以使用 netwox 工具提供的相关模块发送 TCP 包,与目标主机连接,然后通过返 ...

  8. 计算机网络协议测试技术分析

    摘要:介绍了协议 测试技术以及相关标准进展情况,着重介绍了协议一致性测试和互操作性测试,分析了二者的差异,明确了它们之间的关系.便于进一步理解协议测试技术. 关键词:协议测试:互操作性测试:计算机网 ...

  9. 嵌入式 RTP协议详解以及其他相关协议

    RTP协议 1 RTP报文格式 2 基于RTP的带宽控制方法 1.接收端的控制策略 2.发送端的控制策略    RTP(Real-timeTransportProtocol)是由IETF开发的实时传输 ...

  10. 直播协议服务器,p2p直播服务器和流媒体协议有关系吗?

    P2p直播服务器顾名思义使用P2P技术.目前,P2P技术可实现共享文件.流媒体播放.点对点通信软件等等,比如下载站常见的迅雷和视频站常见的爱奇艺.P2P技术属于分布式系统的应用,通常表现为客户端直接交 ...

最新文章

  1. Linux 进程管理命令
  2. 实验7-3-1 字符串逆序 (15分)
  3. 音视频SDP协议简介
  4. Linux文件描述符和输入输出重定向
  5. 传智播客java测试题_传智播客java考试习题3
  6. Sybase迁移Oracle字符集问题,Sybase数据库迁移数据到Oracle(未改进)
  7. Labview软件、NI数据采集卡、汽车发动机数据采集学习总结(二)
  8. 【WIN11】微软拼音输入法单字频率固定方法
  9. 触摸屏一体机的类型有哪些
  10. pat2020春季考试7-2 The Judger (25 分) 7-4 Replacement Selection (30 分)
  11. 如何删除tmp计算机桌面,win10系统下tmp临时文件删除不了像何解决
  12. 2019年最新的一波手机APP分享,每一个都是大家的菜哦!
  13. 计算机网络传输介质的特点,计算机网络基础:数据通信技术之传输介质
  14. Day 256/300 前端如何启动PHP后端项目
  15. 常用数学符号 希腊字母
  16. sin函数对照表_常见三角函数值对照表
  17. Windows下RStudio的下载与安装教程
  18. excel 透视表 vba_使用Excel VBA删除数据透视表计算字段
  19. AppsFlyer 研究(十四)创建 Facebook App 获取FaceBook App ID
  20. 【Spark基础练习题一】

热门文章

  1. 成都公办计算机学校,成都计算机学校公立-成都公立的计算机学校有哪
  2. TextCNN模型原理
  3. 阿里云Maven仓库
  4. 华中数控系统与高创驱动器EtherCat通讯设置及控制参数
  5. 2022年java学习路线指南
  6. 关于极化码Polar code的笔记
  7. 每天有数百人搜索App破解,开发者该怎么保护自己的手机应用呢?
  8. 微信小程序底部导航栏小效果
  9. 汉仪南宫体简 字体如何卸载删除?
  10. PDF文件转换成excel文件的三种方法