資源簡介
OpenSSH是SSH協議遠程登錄的首選連接工具。它加密所有流量以消除竊聽,連接劫持和其他攻擊。另外,OpenSSH提供了一套安全的隧道功能,多種認證方法和復雜的配置選項。
OpenSSH套件包含以下工具:
遠程操作使用 ssh, scp和 sftp完成。
使用ssh-add, ssh-keysign, ssh-keyscan和 ssh-keygen進行密鑰管理 。
服務 端由sshd, sftp-server和 ssh-agent組成。
OpenSSH是由OpenBSD項目的一些開發人員開發的, 并且可以使用BSD格式的許可證。
OpenSSH被納入到許多商業產品中,但這些公司中很少有公司通過資助協助OpenSSH。
OpenSSH套件包含以下工具:
遠程操作使用 ssh, scp和 sftp完成。
使用ssh-add, ssh-keysign, ssh-keyscan和 ssh-keygen進行密鑰管理 。
服務 端由sshd, sftp-server和 ssh-agent組成。
OpenSSH是由OpenBSD項目的一些開發人員開發的, 并且可以使用BSD格式的許可證。
OpenSSH被納入到許多商業產品中,但這些公司中很少有公司通過資助協助OpenSSH。
代碼片段和文件信息
/* $OpenBSD:?addrmatch.cv?1.13?2016/09/21?16:55:42?djm?Exp?$?*/
/*
?*?Copyright?(c)?2004-2008?Damien?Miller?
?*
?*?Permission?to?use?copy?modify?and?distribute?this?software?for?any
?*?purpose?with?or?without?fee?is?hereby?granted?provided?that?the?above
?*?copyright?notice?and?this?permission?notice?appear?in?all?copies.
?*
?*?THE?SOFTWARE?IS?PROVIDED?“AS?IS“?AND?THE?AUTHOR?DISCLAIMS?ALL?WARRANTIES
?*?WITH?REGARD?TO?THIS?SOFTWARE?INCLUDING?ALL?IMPLIED?WARRANTIES?OF
?*?MERCHANTABILITY?AND?FITNESS.?IN?NO?EVENT?SHALL?THE?AUTHOR?BE?LIABLE?FOR
?*?ANY?SPECIAL?DIRECT?INDIRECT?OR?CONSEQUENTIAL?DAMAGES?OR?ANY?DAMAGES
?*?WHATSOEVER?RESULTING?FROM?LOSS?OF?USE?DATA?OR?PROFITS?WHETHER?IN?AN
?*?ACTION?OF?CONTRACT?NEGLIGENCE?OR?OTHER?TORTIOUS?ACTION?ARISING?OUT?OF
?*?OR?IN?CONNECTION?WITH?THE?USE?OR?PERFORMANCE?OF?THIS?SOFTWARE.
?*/
#include?“includes.h“
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?
#include?“match.h“
#include?“log.h“
struct?xaddr?{
sa_family_t af;
union?{
struct?in_addr v4;
struct?in6_addr v6;
u_int8_t addr8[16];
u_int32_t addr32[4];
}?xa; ????/*?128-bit?address?*/
u_int32_t scope_id; /*?iface?scope?id?for?v6?*/
#define?v4 xa.v4
#define?v6 xa.v6
#define?addr8 xa.addr8
#define?addr32 xa.addr32
};
static?int
addr_unicast_masklen(int?af)
{
switch?(af)?{
case?AF_INET:
return?32;
case?AF_INET6:
return?128;
default:
return?-1;
}
}
static?inline?int
masklen_valid(int?af?u_int?masklen)
{
switch?(af)?{
case?AF_INET:
return?masklen?<=?32???0?:?-1;
case?AF_INET6:
return?masklen?<=?128???0?:?-1;
default:
return?-1;
}
}
/*
?*?Convert?struct?sockaddr?to?struct?xaddr
?*?Returns?0?on?success?-1?on?failure.
?*/
static?int
addr_sa_to_xaddr(struct?sockaddr?*sa?socklen_t?slen?struct?xaddr?*xa)
{
struct?sockaddr_in?*in4?=?(struct?sockaddr_in?*)sa;
struct?sockaddr_in6?*in6?=?(struct?sockaddr_in6?*)sa;
memset(xa?‘\0‘?sizeof(*xa));
switch?(sa->sa_family)?{
case?AF_INET:
if?(slen?(socklen_t)sizeof(*in4))
return?-1;
xa->af?=?AF_INET;
memcpy(&xa->v4?&in4->sin_addr?sizeof(xa->v4));
break;
case?AF_INET6:
if?(slen?(socklen_t)sizeof(*in6))
return?-1;
xa->af?=?AF_INET6;
memcpy(&xa->v6?&in6->sin6_addr?sizeof(xa->v6));
#ifdef?HAVE_STRUCT_SOCKADDR_IN6_SIN6_SCOPE_ID
xa->scope_id?=?in6->sin6_scope_id;
#endif
break;
default:
return?-1;
}
return?0;
}
/*
?*?Calculate?a?netmask?of?length?‘l‘?for?address?family?‘af‘?and
?*?store?it?in?‘n‘.
?*?Returns?0?on?success?-1?on?failure.
?*/
static?int
addr_netmask(int?af?u_int?l?struct?xaddr?*n)
{
int?i;
if?(masklen_valid(af?l)?!=?0?||?n?==?NULL)
return?-1;
memset(n?‘\0‘?sizeof(*n));
switch?(af)?{
case?AF_INET:
n->af?=?AF_INET;
if?(l?==?0)
return?0;
n->v4.s_addr?=?htonl((0xffffffff?<(32?-?l))?&?0xffffffff);
return?0;
case?AF_INET6:
n->af?=?A
- 上一篇:計量數據可用于經典線性回歸模型的學習
- 下一篇:運料小車PLC編程
評論
共有 條評論