协议Jiurl255 技术参考

rootkit隐藏tcp连接信息 rootkit隐藏tcp连接信息 /* *通过hook内核函数tcp4_seq_show来隐藏某端口的tcpv4连接信息 */ /*隐藏TCP的53端口的连接*/ #include <linux/init.h> #include <linux/module.h> #include <linux/kallsyms.h> #include <linux/kernel.h> #include <linux/string.h> #include & 阅读详情
这是一种很特殊的方法,使用它通讯没有端口,而且由于它的特殊性,也许会带来一些其他的优点。但这种方法也有一个比较大的缺点。
    它,也许该起个名字,比如叫Jiurl255。它不使用tcp协议,也不使用udp协议,也不使用icmp协议。它使用什么协议,就像乱起的那个名字一样,它使用255协议。


上面这幅图,是一个没有IP选项的IP头。其中有个字段为8位协议,一个字节长,系统就是通过这个字节中的值来区别上层协议是什么,通过这个字节的值来决定应该把数据交给谁来处理。TCP是十进制6,UDP是十进制17。就是说这个值是6的话就交给tcp处理,是17的话就交给udp处理。那么如果这个值是一个没有人处理的值会怎么样呢?比如222,255(8bit,最大255)。我觉得255漂亮些,就拿255说吧,其他没人用的值都是一样的。那么会怎么样呢?我猜测可以收到的,后来做了些小试验,说明我是对的。(我曾夜观天象,发现你有学计算机的命)。这个东西和tcp,udp没什么关系,自然也就不会有tcp,udp的端口号了。

好了,有兴趣的先试一试吧,使用Jiurl255做一次简单通讯的客户端程序下载服务器端程序下载
服务器端叫rserver,客户端叫rclient。
rserver 首先 theSocket = socket(AF_INET, SOCK_RAW, 255);建立一个使用Jiurl255的原始套接字,然后绑定本地地址,最后阻塞在recvfrom,等待着发往255协议的数据。收到之后,会将收到数据打印出来。
rclient 首先 获得服务器的IP地址,然后 theSocket = socket(AF_INET, SOCK_RAW, 255);建立一个使用Jiurl255的原始套接字,然后让你从键盘输入些数据 就 sendto 用协议255向服务器端发送输入的数据。

第一个试验,进行一次收发,就可以发现,确实是可以利用没人用的协议号发送和接收数据。大概是这样的,系统收到ip包以后看该协议号有没有进程要接受,如果有的话,就发给那个进程。

第二个试验,运行一个rclient,运行两个rserver,发一次数据。可以发现,两个rserver都收到了rclient发的数据。说明系统会把收到的数据发给每个要接受这个协议号上数据的进程。

另一个试验,server端创建套接字时,指定协议号为200,client端创建套接字,填充ip头时,都指定协议号为255,结果server端就收不到client端发送的数据了。

当时试验后的笔记:"
server端收数据
client端发数据
server端创建套接字时,指定协议号为255,
client端创建套接字,填充ip头时,都指定协议号为255,
结果server端收到了client端发送的数据。

server端创建套接字时,指定协议号为200,
client端创建套接字,填充ip头时,都指定协议号为255,
结果server端就收不到client端发送的数据了。

多个server端,都使用协议号255,
client端也向255协议发数据,
多个server端,都收到了数据。
"

还有就是,如果程序既发又收的,并且是发往本机的,那么程序会收到自己发出的内容。没说清楚好像,比如吧,一个程序,发255的数据之后,就接收255上的数据,他把数据发往本机,那么它就会收到数据。

rclient:

#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <ws2tcpip.h> 
#include <conio.h>

#pragma comment(lib,"ws2_32.lib")


typedef struct ip_hdr //定义IP首部
{
unsigned char h_verlen; //4位首部长度,4位IP版本号
unsigned char tos; //8位服务类型TOS
unsigned short total_len; //16位总长度(字节)
unsigned short ident; //16位标识
unsigned short frag_and_flags; //3位标志位
unsigned char ttl; //8位生存时间 TTL
unsigned char proto; //8位协议 (TCP, UDP 或其他)
unsigned short checksum; //16位IP首部校验和
unsigned int sourceIP; //32位源IP地址
unsigned int destIP; //32位目的IP地址
}IP_HEADER, *PIP_HEADER;


USHORT CheckSum(USHORT *buffer, int size);

void RawClient( char *szServer );


void main()
{
WSADATA wsaData;

char ServerAddr[256];

printf("Server Addr : ");
scanf("%s",ServerAddr);
printf("/n");

WSAStartup(0x0202, &wsaData);

RawClient(ServerAddr);

WSACleanup();
}

/////////////////////////////////////////////////
USHORT CheckSum(USHORT *buffer, int size)
{
unsigned long cksum=0;

while (size > 1)
{
cksum += *buffer++;
size -= sizeof(USHORT); 
}
if (size)
{
cksum += *(UCHAR*)buffer; 
}
cksum = (cksum >> 16) + (cksum & 0xffff);
cksum += (cksum >>16); 

return (USHORT)(~cksum); 
}

//////////////////////////////////////////////////////////
void RawClient( char *szServer )
{
LPHOSTENT lpHostEntry;

lpHostEntry = gethostbyname(szServer);
if (lpHostEntry == NULL)
{
printf("gethostbyname() error/n");
return;
}

SOCKET theSocket;

theSocket = socket(AF_INET, SOCK_RAW, 255);
if (theSocket == INVALID_SOCKET)
{
printf("socket() error/n");
return;
}

int nRet;
BOOL optval;

optval=TRUE;
nRet = setsockopt(theSocket, IPPROTO_IP, IP_HDRINCL, (char*)&optval, sizeof(optval));
if (SOCKET_ERROR == nRet)
{
printf("SetSockOpt Error!%d/n", WSAGetLastError());
return;
}

SOCKADDR_IN saServer;

saServer.sin_family = AF_INET;
saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list); // Let WinSock assign address
saServer.sin_port = 0; // Use port passed from user

char szBuf[1024];

//////////////////////////////////////////////////////////////////
memset(szBuf, 0, sizeof(szBuf));

int IpHdrLen=0;
int DataLen=0;

IP_HEADER *pIpHdr=NULL;
char* pData=NULL;

IpHdrLen=sizeof(IP_HEADER);

pIpHdr=(IP_HEADER*)szBuf;

pIpHdr->h_verlen=(4<<4)| (sizeof(IP_HEADER) / sizeof(unsigned long));
pIpHdr->tos=0;
pIpHdr->proto=255;
pIpHdr->ttl=128;
pIpHdr->ident=0;
pIpHdr->checksum=0;
pIpHdr->frag_and_flags=0;
pIpHdr->sourceIP=inet_addr("1.1.1.1");
pIpHdr->destIP=(unsigned int)saServer.sin_addr.s_addr;

pData=(szBuf+IpHdrLen);
printf("Type a String :");
scanf("%s",pData);
DataLen=strlen(pData);

pIpHdr->total_len=IpHdrLen+DataLen;

//////////////////////////////////////////////////////////////////
nRet = sendto(theSocket, // Socket
szBuf, // Data buffer
IpHdrLen+DataLen, // Length of data
0, // Flags
(LPSOCKADDR)&saServer, // Server address
sizeof(struct sockaddr)); // Length of address
if(nRet!=SOCKET_ERROR)
{
printf("Client send: %s/n",pData);
}

getch();
closesocket(theSocket);
return;
}

rserver:

#include <winsock2.h>
#include <windows.h>
#include <stdio.h>
#include <ws2tcpip.h> 
#include <conio.h>

#pragma comment(lib,"ws2_32.lib")

void RawServer();

void main()
{
WSADATA wsaData;

WSAStartup(0x0202, &wsaData);

RawServer();

WSACleanup();
}

//////////////////////////////////////////////////////////
void RawServer()
{
int nRet;
SOCKET theSocket;

theSocket = socket(AF_INET, SOCK_RAW, 255);
if (theSocket == INVALID_SOCKET)
{
printf("socket() error/n");
return;
}

SOCKADDR_IN saServer;

saServer.sin_family = AF_INET;
saServer.sin_addr.s_addr = INADDR_ANY; // Let WinSock assign address
saServer.sin_port = 0; // Use port passed from user

nRet = bind(theSocket, // Socket descriptor
(LPSOCKADDR)&saServer, // Address to bind to
sizeof(struct sockaddr) // Size of address
);
if (nRet == SOCKET_ERROR)
{
printf("bind() error/n");
closesocket(theSocket);
return;
}

///////////////////////////////////////////////////
int nLen;
nLen = sizeof(SOCKADDR);
char szBuf[1024];

nRet = gethostname(szBuf, sizeof(szBuf));
if (nRet == SOCKET_ERROR)
{
printf("gethostname() error/n");
closesocket(theSocket);
return;
}

LPHOSTENT lpHostEntry;
lpHostEntry = gethostbyname(szBuf);

printf("Server named %s addr %s /n/n",
szBuf, inet_ntoa(*(LPIN_ADDR)lpHostEntry->h_addr));
///////////////////////////////////////////////////

SOCKADDR_IN saClient;

memset(szBuf, 0, sizeof(szBuf));

nRet = recvfrom(theSocket, // Bound socket
szBuf, // Receive buffer
sizeof(szBuf), // Size of buffer in bytes
0, // Flags
(struct sockaddr*)&saClient, // Buffer to receive client address 
&nLen); // Length of client address buffer
if(nRet!=SOCKET_ERROR)
{
printf("Server recv: %s/n",szBuf+20);
}
else
{
printf("recv error: %d/n",WSAGetLastError());
closesocket(theSocket);
return;
}

getch();
closesocket(theSocket);
return;
}

使用Jiurl255进行数据传输明显是没有tcp和udp的端口的,这样也就不会被 netstat -an 之类的命令看到。这和利用icmp传输数据很象,但是我觉得Jiurl255比用icmp传数据要来的好一些。它还有个比较大的缺点就是,由于直接使用的是ip,所以传输的数据是有可能丢失的,这是我观察后写的笔记:"使用ip,ip头字段中的上层协议填255,这是一个还没有人用的协议号。然后在网络中两个主机上分别运行c,s程序,c发送ip255报文,内容hello n,共发50个,每秒发一个。s收ip255报文,确实收到,一次测试中,50个报文,收到了49个,也确实存在ip报丢失的情况。两个方向上都试了,是可行的。"
因此用此方法隐藏端口是要多费不少力气的,我自己写的一个程序中,传送文件使用了一些简单的等待ack,超时重发的机制保证数据不会丢失和发生错误,传送命令,没有保证不会丢失。有时间的话,准备写个保证不丢失,不错误的收发函数。传送文件用的那些机制,参考了使用udp协议进行文件可靠传输的tftp协议。

SpringBoot 系列教程(二):SpringBoot使用Devtools实现热部署 1.devtools   spring为开发者提供了一个名为spring-boot-devtools的模块来使Spring Boot应用支持热部署,提高开发者的开发效率,无需手动重启Spring Boot应用。 2.项目搭建   本文是采用IDEA搭建的Spring Boot应用,通过spring-boot-devtools配置,可以支持修改java文件会自动重启程序,一些资源无需触发重启,... 阅读详情

相关推荐

手把手教你学Simulink——基础储能管理场景实例:基于Simulink的压缩空气储能(CAES)系统简化模型仿真

本文介绍了基于Simulink的压缩空气储能(CAES)系统简化模型仿真方法。CAES作为大规模长时储能方案,相比锂电池具有成本低、寿命长等优势。文章详细讲解了AA-CAES系统组成、热力学建模理论,以及Simulink实现流程,包括储气室、压缩机、膨胀机等核心模块的建模方法。通过8小时充电(50MW)和6小时放电(40MW)的仿真,验证了系统可实现60%往返效率。该模型为理解CAES系统运行机制提供了实用工具,并指出热管理、储气室特性等工程实践要点,为新型电力系统储能规划提供了仿真基础。

MHD0815的博客 151

常见的木马隐藏技术

使用 Rootkit 技术:Rootkit 是一种可以获取系统底层控制权的技术,木马程序利用 Rootkit 可以隐藏自己的文件、进程、网络连接等信息,甚至可以篡改系统的内核数据结构,使得操作系统的监控和检测机制失效。这样,在查看进程列表时,只能看到合法进程在运行,而木马程序的代码在该合法进程的内存空间中执行。- 加载到内核模块:将木马程序的代码加载到操作系统的内核模块中,内核模块在系统中具有较高的权限和优先级,并且其运行在操作系统的内核空间,普通的安全软件很难对其进行检测和查杀。

m0_57836225的博客 1598

隐藏IP和端口,可以隐藏指定的IP和端口

IP,端口隐藏工具IP

安全之路 —— 利用端口复用技术隐藏后门端口

简介 前面我们介绍到我们可以用进程注入的方法,借用其他应用的端口收发信息,从而达到穿墙的效果,那么今天介绍一种新的方法,叫做端口复用技术,他能够与其他应用绑定同一个端口,但同时进行端口复用的程序会接管之前程序的信息接受权,所以我们在复用端口后,要对非后门信息通过127.0.0.1本机回环地址进行消息转发。 C++代码样例 //////////////////////////////...

dengdao1372的博客 301

服务器如何隐藏端口才能不被扫描?

服务器如何隐藏端口才能不被扫描

2409_89014517的博客 4488

WinUSB - 微软为所有 USB 设备提供的常规驱动程序

WinUSB - 微软为所有 USB 设备提供的常规驱动程序    [复制链接]     shangdawei 20 主题 0 好友 717 积分 高级会员 莫元 696 发消息 电梯直

autumn20080101的专栏 5772

Linux rootkit之隐藏TCP端口和检测

Linux rootkit之隐藏TCP端口和检测

小立仔 3628

为ip购买域名后,隐藏端口进行访问的方式

方式一(这种方式适合前后端不分离的开发方式,前后端都堆在一个项目里面一个人写):利用tomcat进行管理:Tomcat进行云部署服务器,将创建好的War包搬到云服务器上,然后将Tomcat的server.xml的配置文件中的Connector port改为80端口,因为这是浏览器默认的端口,然后使用tomcat运行War包,此时直接访问http://ip地址/index.html文件即可而不用再显式加端口号,之后为ip购买一个域名,直接域名访问网址就可以了。

qq_60567426的博客 2501

Java 面试知识点解析(五)——网络协议

前言: 在遨游了一番 Java Web 的世界之后,发现了自己的一些缺失,所以就着一篇深度好文:知名互联网公司校招 Java 开发岗面试知识点解析 ,来好好的对 Java 知识点进行复习和学习一番,大部分内容参照自这一篇文章,有一些自己补充的,也算是重新学习一下 Java 吧。 前序文章链接: Java 面试知识点解析(一)——基础知识篇 Java 面试知识点解析(二)——高并...

anye0005的博客 1075

Rookit系列一 【隐藏网络端口】【支持Win7 x32/x64 ~ Win10 x32/x64】

Rookit是个老生常谈的话题了,它包括隐藏进程、隐藏模块、隐藏端口等隐藏技术和其他对抗杀软的技术。作为一名二进制安全研究员你可以不去写这些代码,但你不能不懂,也因为最近隔壁组的同事在做这方面的检测向我请教了一些问题,索性我就利用空余时间研究了一下网络端口的隐藏。网上随便去搜搜隐藏端口的资料,发现能用的几乎没有。这才是我研究的动力和分享的意义。\textcolor{green}{这才是我研究的动力和分享的意义。这才是我研究的动力和分享的意义。于是就自己研究了一通,发现也没什么特别的。

qq_41252520的博客 1894

找到的比较全的tcp/ip的协议

TCP/IP的全部IP协议号  十进制 关键字 协议======= ======= ==============0 HOPOPT IPv6 逐跳选项 1 ICMP Internet 控制消息 2 IGMP Internet 组管理 3 GGP 网关对网关 4 IP IP 中的 IP(封装) 5 ST

5216

nginx反向代理wss(websocket

server {         listen       443 ssl;         server_name  localhost;         ssl on;         ssl_certificate      1530106814505.pem;         ssl_certificate_key  1530106814505.key;         ssl_sessi...

雨轻伤的博客 1462

使用nginx反向代理实现隐藏端口

在服务器上下载安装nginx,主要是修改配置nginx.conf。 在http模块中,添加如下配置 常见配置: user nginx nginx; worker_processes 1; error_log /var/log/nginx/error.log; #error_log logs/error.log notice; #error_log logs/error....

HuiL的博客 2万+

计算机网络基本知识2

IP的分类: A,B,C 三类为单播地址 — 既可以作为源ip,也可以作为目标ip使用; D — 组播地址 — 只能作为目标ip使用 E — 保留地址 用于科研教学研究 单播:一对一 组播:一对多 广播:一对所有(在同一个广播域) A类掩码:255.0.0.0 B类掩码:255.255.0.0 C类掩码:255.255.255.0 特殊ip地址: 127.0.0.1 - 127.255.255.254 — 环回地址 255.255.255.255 受限广播地址 — 只能作为目标ip 主机位全1 直接广播

xionglling的博客 459

h。323运行流程

网关向网守注册流程     1)网关发出GRQ,寻找注册网守的IP地址(也可以通过静态配置得网守的IP地址)。   2)可以接受H.225注册的网守返回GCF,否则返回GRJ。   3)网关向找到的网守发送注册请求消息RRQ,其中包含H.225信息.H.225必须定期发送RRQ消息,以表明其注册有效。   4)注册成功则网守返回RCF,否则返回RRJ。   5)网关发送H.225状态报告

Guyf的专栏 2453

IP协议号大全(转载)

IP协议号大全(转载) 标签:IP 协议号 IP协议号 IP首部中有8位协议号,用于指明IP的上层协议. 0 HOPOPT IPv6 逐跳选项 1 ICMP Internet 控制消息 2 IGMP Internet 组管理 3 GGP 网关对网关 4 IP IP 中的 IP(封装) 5 ST 流 6 TCP 传输控制 7 CBT CBT 8 EGP 外部网关协议 9 IGP 任何专用内部网关 (Cisco 将其用于 IGRP) 10 BBN-RCC-MON BBN RCC 监视 11 NVP-II 网

weixin_43951166的博客 1943

WinUSB

WinUSB 本节介绍 Microsoft 为所有 USB 设备提供的常规 WinUSB 驱动程序 (Winusb.sys) 及其用户模式组件。 在早于 Windows XP Service Pack 2 (SP2) 的 Windows 版本中,所有 USB 设备驱动程序都必须在内核模式下运行。如果所创建的 USB 设备的操作系统没有本机类驱动程序,则需要为该设备编写内核模式设备驱动程

奋斗中拥有 1万+

端口截听实现端口隐藏,嗅探与攻击

创建时间:2002-11-05文章属性:原创文章提交:flashsky (flashsky1_at_sina.com)作者:FLASHSKYEMAIL:flashsky@xfocus.org站点:www.xfocus.net  www.shopsky.com转载请注明原作者安全焦点在WINDOWS的SOCKET服务器应用的编程中,如下的语句或许比比都是:       s=socket(AF_INE

uuty的专栏 1208

Hook 系统服务隐藏端口

作者: JIURL主页: http://jiurl.yeah.net有时候写程序,调试程序真是一件非常有趣的事,就比如这次,蹦蹦跳跳,笑嘻嘻,意犹未尽的就把这个程序搞好了。netstat 或者其他各种列举端口的工具,比如fport,或者 sysinternals 的 Tcpview,都是调用 Iphlpapi.dll 中的 API 来完成端口的列举。而 Iphlpapi.dll 中的 API 最终

...... 2289

xlav_app_20231025_jbun.apk.1

xlav_app_20231025_jbun.apk.1

上一篇: 借助VMware实现单机使用WinDbg
下一篇: 32位代码优化常识
freexploit
博客等级 码龄22年 315粉丝 778原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值