// Native wifi.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#ifndef UNICODE
#define UNICODE
#endif
#include <io.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <wlanapi.h>
#include <objbase.h>
#include <wtypes.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
// Need to link with Wlanapi.lib and Ole32.lib
#pragma comment(lib, "wlanapi.lib")
#pragma comment(lib, "ole32.lib")
#include <string>
using namespace std;
#include <WinSock.h>
#pragma comment(lib,"ws2_32.lib")
HANDLE hRead1,hWrite1;
HANDLE hRead2,hWrite2;
BOOL ReadAdb(HANDLE hReadPipe,string &cmdResult)
{
DWORD lBytesRead;
char *buffer=new char [1024];
memset(buffer,0,1024);
FILE *pfd = fopen("./ret.txt","wb");
if (!ReadFile(hReadPipe,buffer,1023,&lBytesRead,0))
{
delete [] buffer;
return FALSE;
}
else
{
buffer[lBytesRead]='\0';
cmdResult += buffer;
fwrite(buffer,1,lBytesRead,pfd);
delete [] buffer;
return TRUE;
}
fclose(pfd);
}
int FTPSocketSend(int pSock, char * buf)
{
int status;
char sizebuf[32]={0};
status = send(pSock, buf, strlen(buf), 0);
printf("11111 %d\n",status);
char recvbuf[256] = {0};
int len = recv(pSock,recvbuf,256,0);
if (len > 0)
{
printf(recvbuf);
if (strstr(buf,"SIZE"))
{
if (strstr(recvbuf,"213"))
{
strcpy(sizebuf,recvbuf+4);
printf("size :%d\n",atoi(sizebuf));
return atoi(sizebuf);
}
}
printf("\r\n");
}
return status;
}
//----------------------------------------------------------------
//函数名: DisableNetInterface
//创建人: sam young (samway@gmail.com)
//创建时间:2004-4-12
//函数功能:禁用/启用网络
//参数: bool bStatus,
// true: 禁用网络,
// false: 启用网络
//修改人: sam young (samway@gmail.com)
//修改时间:2004-6-7
//修改描述:添加网卡类型配置项,根据网卡类型以及网卡描述来获得硬件层
/* 配置文件相关内容:
//本机使用网卡名称
[NETCARD]
//网卡类型
TYPE=PCI
//描述名称
NAME=SiS 900 PCI Fast Ethernet Adapter
*/
//----------------------------------------------------------------
BOOL WriteFtp(char * cmdBuffer,HANDLE hWritePipe2)
{
DWORD lBytesWrite;
if (!WriteFile(hWritePipe2,(LPTSTR)(LPCTSTR)cmdBuffer,strlen(cmdBuffer),&lBytesWrite,NULL))
{
printf(cmdBuffer);
return FALSE;
}
return TRUE;
}
typedef char s8; /* 有符号的8bit整数 */
typedef unsigned char u8; /* 无符号的8bit整数 */
typedef short s16; /* 有符号的16bit整数 */
typedef unsigned short u16; /* 无符号的16bit整数 */
typedef int s32; /* 有符号的32bit整数 */
typedef unsigned int u32; /* 无符号的32bit整数 */
s32 FtpcCmd(const s8 *ps8Str1,const s8 *ps8Str2)
{
return 0;
}
s32 FtpcSvrConnect(s8 *s8SvrIp, u16 u16SvrPort)
{
WSADATA WSAData;
if( WSAStartup( MAKEWORD( 1, 1 ), &WSAData ) )//初始化
{
printf( "initializationing error!\n" );
WSACleanup( );
exit( 0 );
}
struct timeval tv;
fd_set myset;
s32 s32Count, s32Ret, s32Fd,s32arg;
struct sockaddr_in tSockAddr;
memset(&tSockAddr, 0, sizeof(tSockAddr));
tSockAddr.sin_family = AF_INET;
tSockAddr.sin_port = htons(u16SvrPort); /* 将端口号转换成网络字节序. */
tSockAddr.sin_addr.s_addr = inet_addr(s8SvrIp); /* 将ASCII地址转换成二进制地址. */
s32Fd = socket(AF_INET,SOCK_STREAM,0);
s32Ret = connect(s32Fd,(struct sockaddr *)&tSockAddr, sizeof(tSockAddr));
if (s32Ret < 0)
{
printf("11111\n");
return -1;
}
return s32Fd;
}
DWORD __stdcall ReadThread(LPVOID lparam)
{
string resultout;
struct timeval tv;
fd_set myset;
int s32Ret=0;
int fd = *(int *)hRead1;
while(1)
{
tv.tv_sec = 2; /*设置5s*/
tv.tv_usec = 0;
FD_ZERO(&myset);
FD_SET(fd, &myset);
//s32Ret = select(fd+1, NULL, &myset, NULL, &tv);
if (s32Ret > 0)
{
ReadAdb(hRead1,resultout);
}
Sleep(500);
}
}
int wmain()
{
// Declare and initialize variables.
#if 1
HANDLE hClient = NULL;
DWORD dwMaxClient = 2; //
DWORD dwCurVersion = 0;
DWORD dwResult = 0;
DWORD dwRetVal = 0;
int iRet = 0;
WCHAR GuidString[39] = {0};
unsigned int i, j, k;
/* variables used for WlanEnumInterfaces */
PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
PWLAN_INTERFACE_INFO pIfInfo = NULL;
PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL;
PWLAN_AVAILABLE_NETWORK pBssEntry = NULL;
int iRSSI = 0;
dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult);
return 1;
// You can use FormatMessage here to find out why the function failed
}
WLAN_CONNECTION_PARAMETERS wLanCP;
dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult);
return 1;
// You can use FormatMessage here to find out why the function failed
} else {
wprintf(L"Num Entries: %lu\n", pIfList->dwNumberOfItems);
wprintf(L"Current Index: %lu\n", pIfList->dwIndex);
for (i = 0; i < (int) pIfList->dwNumberOfItems; i++) {
pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
wprintf(L" Interface Index[%u]:\t %lu\n", i, i);
iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString,
sizeof(GuidString)/sizeof(*GuidString));
// For c rather than C++ source code, the above line needs to be
// iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString,
// sizeof(GuidString)/sizeof(*GuidString));
if (iRet == 0)
wprintf(L"StringFromGUID2 failed\n");
else {
wprintf(L" InterfaceGUID[%d]: %ws\n",i, GuidString);
}
wprintf(L" Interface Description[%d]: %ws", i,
pIfInfo->strInterfaceDescription);
wprintf(L"\n");
wprintf(L" Interface State[%d]:\t ", i);
switch (pIfInfo->isState) {
case wlan_interface_state_not_ready:
wprintf(L"Not ready\n");
break;
case wlan_interface_state_connected:
wprintf(L"Connected\n");
break;
case wlan_interface_state_ad_hoc_network_formed:
wprintf(L"First node in a ad hoc network\n");
break;
case wlan_interface_state_disconnecting:
wprintf(L"Disconnecting\n");
break;
case wlan_interface_state_disconnected:
wprintf(L"Not connected\n");
break;
case wlan_interface_state_associating:
wprintf(L"Attempting to associate with a network\n");
break;
case wlan_interface_state_discovering:
wprintf(L"Auto configuration is discovering settings for the network\n");
break;
case wlan_interface_state_authenticating:
wprintf(L"In process of authenticating\n");
break;
default:
wprintf(L"Unknown state %ld\n", pIfInfo->isState);
break;
}
wprintf(L"\n");
dwResult = WlanGetAvailableNetworkList(hClient,
&pIfInfo->InterfaceGuid,
0,
NULL,
&pBssList);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanGetAvailableNetworkList failed with error: %u\n",
dwResult);
dwRetVal = 1;
// You can use FormatMessage to find out why the function failed
} else {
wprintf(L"WLAN_AVAILABLE_NETWORK_LIST for this interface\n");
wprintf(L" Num Entries: %lu\n\n", pBssList->dwNumberOfItems);
for (j = 0; j < pBssList->dwNumberOfItems; j++) {
pBssEntry =
(WLAN_AVAILABLE_NETWORK *) & pBssList->Network[j];
wprintf(L" Profile Name[%u]: %ws\n", j, pBssEntry->strProfileName);
wprintf(L" SSID[%u]:\t\t ", j);
if (pBssEntry->dot11Ssid.uSSIDLength == 0)
wprintf(L"\n");
else {
for (k = 0; k < pBssEntry->dot11Ssid.uSSIDLength; k++) {
wprintf(L"%c", (int) pBssEntry->dot11Ssid.ucSSID[k]);
}
wprintf(L"\n");
}
wprintf(L" BSS Network type[%u]:\t ", j);
switch (pBssEntry->dot11BssType) {
case dot11_BSS_type_infrastructure :
wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType);
break;
case dot11_BSS_type_independent:
wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType);
break;
default:
wprintf(L"Other (%lu)\n", pBssEntry->dot11BssType);
break;
}
wprintf(L" Number of BSSIDs[%u]:\t %u\n", j, pBssEntry->uNumberOfBssids);
wprintf(L" Connectable[%u]:\t ", j);
if (pBssEntry->bNetworkConnectable)
wprintf(L"Yes\n");
else {
wprintf(L"No\n");
wprintf(L" Not connectable WLAN_REASON_CODE value[%u]:\t %u\n", j,
pBssEntry->wlanNotConnectableReason);
}
wprintf(L" Number of PHY types supported[%u]:\t %u\n", j, pBssEntry->uNumberOfPhyTypes);
if (pBssEntry->wlanSignalQuality == 0)
iRSSI = -100;
else if (pBssEntry->wlanSignalQuality == 100)
iRSSI = -50;
else
iRSSI = -100 + (pBssEntry->wlanSignalQuality/2);
wprintf(L" Signal Quality[%u]:\t %u (RSSI: %i dBm)\n", j,
pBssEntry->wlanSignalQuality, iRSSI);
wprintf(L" Security Enabled[%u]:\t ", j);
if (pBssEntry->bSecurityEnabled)
wprintf(L"Yes\n");
else
wprintf(L"No\n");
wprintf(L" Default AuthAlgorithm[%u]: ", j);
switch (pBssEntry->dot11DefaultAuthAlgorithm) {
case DOT11_AUTH_ALGO_80211_OPEN:
wprintf(L"802.11 Open (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_80211_SHARED_KEY:
wprintf(L"802.11 Shared (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_WPA:
wprintf(L"WPA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_WPA_PSK:
wprintf(L"WPA-PSK (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_WPA_NONE:
wprintf(L"WPA-None (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_RSNA:
wprintf(L"RSNA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_RSNA_PSK:
wprintf(L"RSNA with PSK(%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
default:
wprintf(L"Other (%lu)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
}
wprintf(L" Default CipherAlgorithm[%u]: ", j);
switch (pBssEntry->dot11DefaultCipherAlgorithm) {
case DOT11_CIPHER_ALGO_NONE:
wprintf(L"None (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
case DOT11_CIPHER_ALGO_WEP40:
wprintf(L"WEP-40 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
case DOT11_CIPHER_ALGO_TKIP:
wprintf(L"TKIP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
case DOT11_CIPHER_ALGO_CCMP:
wprintf(L"CCMP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
case DOT11_CIPHER_ALGO_WEP104:
wprintf(L"WEP-104 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
case DOT11_CIPHER_ALGO_WEP:
wprintf(L"WEP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
default:
wprintf(L"Other (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
}
wprintf(L" Flags[%u]:\t 0x%x", j, pBssEntry->dwFlags);
if (pBssEntry->dwFlags) {
if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
wprintf(L" - Currently connected");
if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
wprintf(L" - Has profile");
}
wprintf(L"\n");
wprintf(L"\n");
}
}
}
}
if (pBssList != NULL) {
WlanFreeMemory(pBssList);
pBssList = NULL;
}
if (pIfList != NULL) {
WlanFreeMemory(pIfList);
pIfList = NULL;
}
#endif
#if 0
HANDLE hCmd;
SECURITY_ATTRIBUTES sa;
sa.nLength =sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
if (!CreatePipe(&hRead1,&hWrite1,&sa,0))
{
return FALSE;
}
if (!CreatePipe(&hRead2,&hWrite2,&sa,0))
{
return FALSE;
}
STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdInput = hRead2;
si.hStdOutput = hWrite1;
si.hStdError = hWrite1;
char cmdLine[] = "cmd.exe";
CreateThread(NULL,0,ReadThread,0,0,NULL);
int num = MultiByteToWideChar(0,0,cmdLine,-1,NULL,0);
wchar_t *wide = new wchar_t[num];
MultiByteToWideChar(0,0,cmdLine,-1,wide,num);
PROCESS_INFORMATION ProcessInformation;
printf("CreateProcess \n");
if (!CreateProcess(NULL,wide,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation))
{
printf("CreateProcess error\n");
//getchar();
return FALSE;
}
hCmd=ProcessInformation.hProcess;
printf("CreateProcess success\n");
char cmdline[256] = "ftp";
strcat(cmdline,"\r\n");
WriteFtp(cmdline,hWrite2);
memset(cmdline,0,256);
strcpy(cmdline,"open 192.168.1.102");
strcat(cmdline,"\r\n");
WriteFtp(cmdline,hWrite2);
Sleep(4000);
memset(cmdline,0,256);
strcpy(cmdline,"foxconn");
strcat(cmdline,"\n");
WriteFtp(cmdline,hWrite2);
Sleep(3000);
memset(cmdline,0,256);
strcpy(cmdline,"get a.bin c:/a.bin");
strcat(cmdline,"\r\n");
WriteFtp(cmdline,hWrite2);
#endif
int fd = FtpcSvrConnect("192.168.1.102",21);
FTPSocketSend(fd,"USER foxconn\r\n");
Sleep(500);
FTPSocketSend(fd,"PASS foxconnpw\r\n");
FTPSocketSend(fd,"TYPE I\r\n");
int filesize = FTPSocketSend(fd,"SIZE a.bin\r\n");
int iSockFtpData = -1;//datasocket建立后返回的套接口描述符号
int iSockAccept = -1;
struct sockaddr_in addr;//定义socket结构
int iFtpLength;
int tmp;
int iFtpCmdReturn;
int retval = -1;
FILE *iOpenReturn; //接收open函数的返回值
/*建立data socket*/
iSockFtpData = socket(AF_INET,SOCK_STREAM,0);
if (iSockFtpData == -1)
goto out;
struct sockaddr_in tMyAddr;
memset(&tMyAddr, 0, sizeof(struct sockaddr_in));
tMyAddr.sin_family = AF_INET;
tMyAddr.sin_port = htons(8888);
tMyAddr.sin_addr.s_addr = inet_addr((s8 *)("192.168.1.102"));
/*绑定*/
if (bind(iSockFtpData,(struct sockaddr *)&tMyAddr,sizeof(tMyAddr)) == -1)
printf("3333333333333333333333333");
if (listen(iSockFtpData,1) == -1)
goto out;
int aa = 8888/256;
int bb = 8888%256;
char cmdbuf[128] = {0};
sprintf(cmdbuf,"PORT 192,168,1,102,%d,%d\r\n",aa,bb);
iFtpCmdReturn = FTPSocketSend(fd,cmdbuf );
iFtpCmdReturn = FTPSocketSend(fd,"RETR a.bin\r\n" );
tmp = sizeof(addr);
iSockAccept = accept(iSockFtpData,(struct sockaddr *)&addr,&tmp);
if (iSockAccept == -1)
goto out;
iOpenReturn = fopen("./test.txt","wb");
if (iOpenReturn ==NULL)
goto out;
char aFtpBuffer[4096] = {0};
retval = 0;
while ((iFtpLength=recv(iSockAccept,aFtpBuffer,sizeof(aFtpBuffer),0))>0)
{
printf("recv data:%d\n",iFtpLength);
fwrite(aFtpBuffer,iFtpLength,1,iOpenReturn);
}
fclose(iOpenReturn);
out:
//close(iSockAccept);
//close(iSockFtpData);
//close(fd);
return dwRetVal;
}
//
#include "stdafx.h"
#ifndef UNICODE
#define UNICODE
#endif
#include <io.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <wlanapi.h>
#include <objbase.h>
#include <wtypes.h>
#include <fcntl.h>
#include <stdio.h>
#include <stdlib.h>
// Need to link with Wlanapi.lib and Ole32.lib
#pragma comment(lib, "wlanapi.lib")
#pragma comment(lib, "ole32.lib")
#include <string>
using namespace std;
#include <WinSock.h>
#pragma comment(lib,"ws2_32.lib")
HANDLE hRead1,hWrite1;
HANDLE hRead2,hWrite2;
BOOL ReadAdb(HANDLE hReadPipe,string &cmdResult)
{
DWORD lBytesRead;
char *buffer=new char [1024];
memset(buffer,0,1024);
FILE *pfd = fopen("./ret.txt","wb");
if (!ReadFile(hReadPipe,buffer,1023,&lBytesRead,0))
{
delete [] buffer;
return FALSE;
}
else
{
buffer[lBytesRead]='\0';
cmdResult += buffer;
fwrite(buffer,1,lBytesRead,pfd);
delete [] buffer;
return TRUE;
}
fclose(pfd);
}
int FTPSocketSend(int pSock, char * buf)
{
int status;
char sizebuf[32]={0};
status = send(pSock, buf, strlen(buf), 0);
printf("11111 %d\n",status);
char recvbuf[256] = {0};
int len = recv(pSock,recvbuf,256,0);
if (len > 0)
{
printf(recvbuf);
if (strstr(buf,"SIZE"))
{
if (strstr(recvbuf,"213"))
{
strcpy(sizebuf,recvbuf+4);
printf("size :%d\n",atoi(sizebuf));
return atoi(sizebuf);
}
}
printf("\r\n");
}
return status;
}
//----------------------------------------------------------------
//函数名: DisableNetInterface
//创建人: sam young (samway@gmail.com)
//创建时间:2004-4-12
//函数功能:禁用/启用网络
//参数: bool bStatus,
// true: 禁用网络,
// false: 启用网络
//修改人: sam young (samway@gmail.com)
//修改时间:2004-6-7
//修改描述:添加网卡类型配置项,根据网卡类型以及网卡描述来获得硬件层
/* 配置文件相关内容:
//本机使用网卡名称
[NETCARD]
//网卡类型
TYPE=PCI
//描述名称
NAME=SiS 900 PCI Fast Ethernet Adapter
*/
//----------------------------------------------------------------
BOOL WriteFtp(char * cmdBuffer,HANDLE hWritePipe2)
{
DWORD lBytesWrite;
if (!WriteFile(hWritePipe2,(LPTSTR)(LPCTSTR)cmdBuffer,strlen(cmdBuffer),&lBytesWrite,NULL))
{
printf(cmdBuffer);
return FALSE;
}
return TRUE;
}
typedef char s8; /* 有符号的8bit整数 */
typedef unsigned char u8; /* 无符号的8bit整数 */
typedef short s16; /* 有符号的16bit整数 */
typedef unsigned short u16; /* 无符号的16bit整数 */
typedef int s32; /* 有符号的32bit整数 */
typedef unsigned int u32; /* 无符号的32bit整数 */
s32 FtpcCmd(const s8 *ps8Str1,const s8 *ps8Str2)
{
return 0;
}
s32 FtpcSvrConnect(s8 *s8SvrIp, u16 u16SvrPort)
{
WSADATA WSAData;
if( WSAStartup( MAKEWORD( 1, 1 ), &WSAData ) )//初始化
{
printf( "initializationing error!\n" );
WSACleanup( );
exit( 0 );
}
struct timeval tv;
fd_set myset;
s32 s32Count, s32Ret, s32Fd,s32arg;
struct sockaddr_in tSockAddr;
memset(&tSockAddr, 0, sizeof(tSockAddr));
tSockAddr.sin_family = AF_INET;
tSockAddr.sin_port = htons(u16SvrPort); /* 将端口号转换成网络字节序. */
tSockAddr.sin_addr.s_addr = inet_addr(s8SvrIp); /* 将ASCII地址转换成二进制地址. */
s32Fd = socket(AF_INET,SOCK_STREAM,0);
s32Ret = connect(s32Fd,(struct sockaddr *)&tSockAddr, sizeof(tSockAddr));
if (s32Ret < 0)
{
printf("11111\n");
return -1;
}
return s32Fd;
}
DWORD __stdcall ReadThread(LPVOID lparam)
{
string resultout;
struct timeval tv;
fd_set myset;
int s32Ret=0;
int fd = *(int *)hRead1;
while(1)
{
tv.tv_sec = 2; /*设置5s*/
tv.tv_usec = 0;
FD_ZERO(&myset);
FD_SET(fd, &myset);
//s32Ret = select(fd+1, NULL, &myset, NULL, &tv);
if (s32Ret > 0)
{
ReadAdb(hRead1,resultout);
}
Sleep(500);
}
}
int wmain()
{
// Declare and initialize variables.
#if 1
HANDLE hClient = NULL;
DWORD dwMaxClient = 2; //
DWORD dwCurVersion = 0;
DWORD dwResult = 0;
DWORD dwRetVal = 0;
int iRet = 0;
WCHAR GuidString[39] = {0};
unsigned int i, j, k;
/* variables used for WlanEnumInterfaces */
PWLAN_INTERFACE_INFO_LIST pIfList = NULL;
PWLAN_INTERFACE_INFO pIfInfo = NULL;
PWLAN_AVAILABLE_NETWORK_LIST pBssList = NULL;
PWLAN_AVAILABLE_NETWORK pBssEntry = NULL;
int iRSSI = 0;
dwResult = WlanOpenHandle(dwMaxClient, NULL, &dwCurVersion, &hClient);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanOpenHandle failed with error: %u\n", dwResult);
return 1;
// You can use FormatMessage here to find out why the function failed
}
WLAN_CONNECTION_PARAMETERS wLanCP;
dwResult = WlanEnumInterfaces(hClient, NULL, &pIfList);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanEnumInterfaces failed with error: %u\n", dwResult);
return 1;
// You can use FormatMessage here to find out why the function failed
} else {
wprintf(L"Num Entries: %lu\n", pIfList->dwNumberOfItems);
wprintf(L"Current Index: %lu\n", pIfList->dwIndex);
for (i = 0; i < (int) pIfList->dwNumberOfItems; i++) {
pIfInfo = (WLAN_INTERFACE_INFO *) &pIfList->InterfaceInfo[i];
wprintf(L" Interface Index[%u]:\t %lu\n", i, i);
iRet = StringFromGUID2(pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString,
sizeof(GuidString)/sizeof(*GuidString));
// For c rather than C++ source code, the above line needs to be
// iRet = StringFromGUID2(&pIfInfo->InterfaceGuid, (LPOLESTR) &GuidString,
// sizeof(GuidString)/sizeof(*GuidString));
if (iRet == 0)
wprintf(L"StringFromGUID2 failed\n");
else {
wprintf(L" InterfaceGUID[%d]: %ws\n",i, GuidString);
}
wprintf(L" Interface Description[%d]: %ws", i,
pIfInfo->strInterfaceDescription);
wprintf(L"\n");
wprintf(L" Interface State[%d]:\t ", i);
switch (pIfInfo->isState) {
case wlan_interface_state_not_ready:
wprintf(L"Not ready\n");
break;
case wlan_interface_state_connected:
wprintf(L"Connected\n");
break;
case wlan_interface_state_ad_hoc_network_formed:
wprintf(L"First node in a ad hoc network\n");
break;
case wlan_interface_state_disconnecting:
wprintf(L"Disconnecting\n");
break;
case wlan_interface_state_disconnected:
wprintf(L"Not connected\n");
break;
case wlan_interface_state_associating:
wprintf(L"Attempting to associate with a network\n");
break;
case wlan_interface_state_discovering:
wprintf(L"Auto configuration is discovering settings for the network\n");
break;
case wlan_interface_state_authenticating:
wprintf(L"In process of authenticating\n");
break;
default:
wprintf(L"Unknown state %ld\n", pIfInfo->isState);
break;
}
wprintf(L"\n");
dwResult = WlanGetAvailableNetworkList(hClient,
&pIfInfo->InterfaceGuid,
0,
NULL,
&pBssList);
if (dwResult != ERROR_SUCCESS) {
wprintf(L"WlanGetAvailableNetworkList failed with error: %u\n",
dwResult);
dwRetVal = 1;
// You can use FormatMessage to find out why the function failed
} else {
wprintf(L"WLAN_AVAILABLE_NETWORK_LIST for this interface\n");
wprintf(L" Num Entries: %lu\n\n", pBssList->dwNumberOfItems);
for (j = 0; j < pBssList->dwNumberOfItems; j++) {
pBssEntry =
(WLAN_AVAILABLE_NETWORK *) & pBssList->Network[j];
wprintf(L" Profile Name[%u]: %ws\n", j, pBssEntry->strProfileName);
wprintf(L" SSID[%u]:\t\t ", j);
if (pBssEntry->dot11Ssid.uSSIDLength == 0)
wprintf(L"\n");
else {
for (k = 0; k < pBssEntry->dot11Ssid.uSSIDLength; k++) {
wprintf(L"%c", (int) pBssEntry->dot11Ssid.ucSSID[k]);
}
wprintf(L"\n");
}
wprintf(L" BSS Network type[%u]:\t ", j);
switch (pBssEntry->dot11BssType) {
case dot11_BSS_type_infrastructure :
wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType);
break;
case dot11_BSS_type_independent:
wprintf(L"Infrastructure (%u)\n", pBssEntry->dot11BssType);
break;
default:
wprintf(L"Other (%lu)\n", pBssEntry->dot11BssType);
break;
}
wprintf(L" Number of BSSIDs[%u]:\t %u\n", j, pBssEntry->uNumberOfBssids);
wprintf(L" Connectable[%u]:\t ", j);
if (pBssEntry->bNetworkConnectable)
wprintf(L"Yes\n");
else {
wprintf(L"No\n");
wprintf(L" Not connectable WLAN_REASON_CODE value[%u]:\t %u\n", j,
pBssEntry->wlanNotConnectableReason);
}
wprintf(L" Number of PHY types supported[%u]:\t %u\n", j, pBssEntry->uNumberOfPhyTypes);
if (pBssEntry->wlanSignalQuality == 0)
iRSSI = -100;
else if (pBssEntry->wlanSignalQuality == 100)
iRSSI = -50;
else
iRSSI = -100 + (pBssEntry->wlanSignalQuality/2);
wprintf(L" Signal Quality[%u]:\t %u (RSSI: %i dBm)\n", j,
pBssEntry->wlanSignalQuality, iRSSI);
wprintf(L" Security Enabled[%u]:\t ", j);
if (pBssEntry->bSecurityEnabled)
wprintf(L"Yes\n");
else
wprintf(L"No\n");
wprintf(L" Default AuthAlgorithm[%u]: ", j);
switch (pBssEntry->dot11DefaultAuthAlgorithm) {
case DOT11_AUTH_ALGO_80211_OPEN:
wprintf(L"802.11 Open (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_80211_SHARED_KEY:
wprintf(L"802.11 Shared (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_WPA:
wprintf(L"WPA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_WPA_PSK:
wprintf(L"WPA-PSK (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_WPA_NONE:
wprintf(L"WPA-None (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_RSNA:
wprintf(L"RSNA (%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
case DOT11_AUTH_ALGO_RSNA_PSK:
wprintf(L"RSNA with PSK(%u)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
default:
wprintf(L"Other (%lu)\n", pBssEntry->dot11DefaultAuthAlgorithm);
break;
}
wprintf(L" Default CipherAlgorithm[%u]: ", j);
switch (pBssEntry->dot11DefaultCipherAlgorithm) {
case DOT11_CIPHER_ALGO_NONE:
wprintf(L"None (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
case DOT11_CIPHER_ALGO_WEP40:
wprintf(L"WEP-40 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
case DOT11_CIPHER_ALGO_TKIP:
wprintf(L"TKIP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
case DOT11_CIPHER_ALGO_CCMP:
wprintf(L"CCMP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
case DOT11_CIPHER_ALGO_WEP104:
wprintf(L"WEP-104 (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
case DOT11_CIPHER_ALGO_WEP:
wprintf(L"WEP (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
default:
wprintf(L"Other (0x%x)\n", pBssEntry->dot11DefaultCipherAlgorithm);
break;
}
wprintf(L" Flags[%u]:\t 0x%x", j, pBssEntry->dwFlags);
if (pBssEntry->dwFlags) {
if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
wprintf(L" - Currently connected");
if (pBssEntry->dwFlags & WLAN_AVAILABLE_NETWORK_CONNECTED)
wprintf(L" - Has profile");
}
wprintf(L"\n");
wprintf(L"\n");
}
}
}
}
if (pBssList != NULL) {
WlanFreeMemory(pBssList);
pBssList = NULL;
}
if (pIfList != NULL) {
WlanFreeMemory(pIfList);
pIfList = NULL;
}
#endif
#if 0
HANDLE hCmd;
SECURITY_ATTRIBUTES sa;
sa.nLength =sizeof(SECURITY_ATTRIBUTES);
sa.bInheritHandle = TRUE;
sa.lpSecurityDescriptor = NULL;
if (!CreatePipe(&hRead1,&hWrite1,&sa,0))
{
return FALSE;
}
if (!CreatePipe(&hRead2,&hWrite2,&sa,0))
{
return FALSE;
}
STARTUPINFO si;
ZeroMemory(&si,sizeof(STARTUPINFO));
si.dwFlags = STARTF_USESHOWWINDOW|STARTF_USESTDHANDLES;
si.wShowWindow = SW_HIDE;
si.hStdInput = hRead2;
si.hStdOutput = hWrite1;
si.hStdError = hWrite1;
char cmdLine[] = "cmd.exe";
CreateThread(NULL,0,ReadThread,0,0,NULL);
int num = MultiByteToWideChar(0,0,cmdLine,-1,NULL,0);
wchar_t *wide = new wchar_t[num];
MultiByteToWideChar(0,0,cmdLine,-1,wide,num);
PROCESS_INFORMATION ProcessInformation;
printf("CreateProcess \n");
if (!CreateProcess(NULL,wide,NULL,NULL,1,0,NULL,NULL,&si,&ProcessInformation))
{
printf("CreateProcess error\n");
//getchar();
return FALSE;
}
hCmd=ProcessInformation.hProcess;
printf("CreateProcess success\n");
char cmdline[256] = "ftp";
strcat(cmdline,"\r\n");
WriteFtp(cmdline,hWrite2);
memset(cmdline,0,256);
strcpy(cmdline,"open 192.168.1.102");
strcat(cmdline,"\r\n");
WriteFtp(cmdline,hWrite2);
Sleep(4000);
memset(cmdline,0,256);
strcpy(cmdline,"foxconn");
strcat(cmdline,"\n");
WriteFtp(cmdline,hWrite2);
Sleep(3000);
memset(cmdline,0,256);
strcpy(cmdline,"get a.bin c:/a.bin");
strcat(cmdline,"\r\n");
WriteFtp(cmdline,hWrite2);
#endif
int fd = FtpcSvrConnect("192.168.1.102",21);
FTPSocketSend(fd,"USER foxconn\r\n");
Sleep(500);
FTPSocketSend(fd,"PASS foxconnpw\r\n");
FTPSocketSend(fd,"TYPE I\r\n");
int filesize = FTPSocketSend(fd,"SIZE a.bin\r\n");
int iSockFtpData = -1;//datasocket建立后返回的套接口描述符号
int iSockAccept = -1;
struct sockaddr_in addr;//定义socket结构
int iFtpLength;
int tmp;
int iFtpCmdReturn;
int retval = -1;
FILE *iOpenReturn; //接收open函数的返回值
/*建立data socket*/
iSockFtpData = socket(AF_INET,SOCK_STREAM,0);
if (iSockFtpData == -1)
goto out;
struct sockaddr_in tMyAddr;
memset(&tMyAddr, 0, sizeof(struct sockaddr_in));
tMyAddr.sin_family = AF_INET;
tMyAddr.sin_port = htons(8888);
tMyAddr.sin_addr.s_addr = inet_addr((s8 *)("192.168.1.102"));
/*绑定*/
if (bind(iSockFtpData,(struct sockaddr *)&tMyAddr,sizeof(tMyAddr)) == -1)
printf("3333333333333333333333333");
if (listen(iSockFtpData,1) == -1)
goto out;
int aa = 8888/256;
int bb = 8888%256;
char cmdbuf[128] = {0};
sprintf(cmdbuf,"PORT 192,168,1,102,%d,%d\r\n",aa,bb);
iFtpCmdReturn = FTPSocketSend(fd,cmdbuf );
iFtpCmdReturn = FTPSocketSend(fd,"RETR a.bin\r\n" );
tmp = sizeof(addr);
iSockAccept = accept(iSockFtpData,(struct sockaddr *)&addr,&tmp);
if (iSockAccept == -1)
goto out;
iOpenReturn = fopen("./test.txt","wb");
if (iOpenReturn ==NULL)
goto out;
char aFtpBuffer[4096] = {0};
retval = 0;
while ((iFtpLength=recv(iSockAccept,aFtpBuffer,sizeof(aFtpBuffer),0))>0)
{
printf("recv data:%d\n",iFtpLength);
fwrite(aFtpBuffer,iFtpLength,1,iOpenReturn);
}
fclose(iOpenReturn);
out:
//close(iSockAccept);
//close(iSockFtpData);
//close(fd);
return dwRetVal;
}